Hive Map-Join配置之谜
Hive Map-Join configuration mystery
有人可以清楚地解释一下
之间的区别吗
hive.auto.convert.join
和
hive.auto.convert.join.noconditionaltask
配置参数?
还有这些相应的尺寸参数:
hive.mapjoin.smalltable.filesize
和
hive.auto.convert.join.noconditionaltask.size
我的观察是,当 运行 在 Tez 上时,Map-Join 在 hive.auto.convert.join.noconditionaltask.size
设置为足够高的值时起作用,即使 hive.mapjoin.smalltable.filesize
设置小于小 table.
为什么我们需要两者
hive.auto.convert.join
和 hive.auto.convert.join.noconditionaltask
?
Apache documentation 非常混乱。
这些参数用于决定何时在 hive 中使用 Map Join
而不是 Common join
,这最终会影响最终的查询性能。
Map join
在其中一个 join table 小到足以装进内存时使用,因此速度非常快。这里是所有参数的解释:
hive.auto.convert.join
当此参数设置为true
时,Hive会自动检查较小的table文件大小是否大于hive.mapjoin.smalltable.filesize
指定的值,如果大于此值则查询通过普通连接执行。启用自动转换连接后,无需在查询中提供映射连接提示。
hive.auto.convert.join.noconditionaltask
当三个或更多table参与join,并且
hive.auto.convert.join = true
- Hive 生成三个或更多 map-side 连接,假设所有 table 的大小都较小。
hive.auto.convert.join.noconditionaltask = true
,如果 n-1 table 的大小小于 10 MB,则 Hive 会将三个或更多 map-side join 合并为一个 map-side join。这里的大小由 hive.auto.convert.join.noconditionaltask.size
.
定义
hive.mapjoin.smalltable.filesize
此设置基本上是告诉优化器系统中小 table 定义的方式。此值定义什么是小的 table,然后当基于此值执行查询时,它确定连接是否有资格转换为 map join
。
hive.auto.convert.join.noconditionaltask.size
大小配置使用户能够控制table内存中可以容纳的大小。该值表示可以转换为适合内存的散列映射的 tables 的大小总和。
这是非常好的解释 link,其中包括对所有 4 个参数的描述和示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html
有人可以清楚地解释一下
之间的区别吗hive.auto.convert.join
和
hive.auto.convert.join.noconditionaltask
配置参数?
还有这些相应的尺寸参数:
hive.mapjoin.smalltable.filesize
和
hive.auto.convert.join.noconditionaltask.size
我的观察是,当 运行 在 Tez 上时,Map-Join 在 hive.auto.convert.join.noconditionaltask.size
设置为足够高的值时起作用,即使 hive.mapjoin.smalltable.filesize
设置小于小 table.
为什么我们需要两者
hive.auto.convert.join
和 hive.auto.convert.join.noconditionaltask
?
Apache documentation 非常混乱。
这些参数用于决定何时在 hive 中使用 Map Join
而不是 Common join
,这最终会影响最终的查询性能。
Map join
在其中一个 join table 小到足以装进内存时使用,因此速度非常快。这里是所有参数的解释:
hive.auto.convert.join
当此参数设置为true
时,Hive会自动检查较小的table文件大小是否大于hive.mapjoin.smalltable.filesize
指定的值,如果大于此值则查询通过普通连接执行。启用自动转换连接后,无需在查询中提供映射连接提示。
hive.auto.convert.join.noconditionaltask
当三个或更多table参与join,并且
hive.auto.convert.join = true
- Hive 生成三个或更多 map-side 连接,假设所有 table 的大小都较小。
hive.auto.convert.join.noconditionaltask = true
,如果 n-1 table 的大小小于 10 MB,则 Hive 会将三个或更多 map-side join 合并为一个 map-side join。这里的大小由 hive.auto.convert.join.noconditionaltask.size
.
hive.mapjoin.smalltable.filesize
此设置基本上是告诉优化器系统中小 table 定义的方式。此值定义什么是小的 table,然后当基于此值执行查询时,它确定连接是否有资格转换为 map join
。
hive.auto.convert.join.noconditionaltask.size
大小配置使用户能够控制table内存中可以容纳的大小。该值表示可以转换为适合内存的散列映射的 tables 的大小总和。
这是非常好的解释 link,其中包括对所有 4 个参数的描述和示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html