lef*_*oin 4 hive query-optimization hiveql mapjoin hive-configuration
有人可以清楚地解释两者之间的区别是什么
hive.auto.convert.join
Run Code Online (Sandbox Code Playgroud)
和
hive.auto.convert.join.noconditionaltask
Run Code Online (Sandbox Code Playgroud)
配置参数?
还有这些对应的尺寸参数:
hive.mapjoin.smalltable.filesize
Run Code Online (Sandbox Code Playgroud)
和
hive.auto.convert.join.noconditionaltask.size
Run Code Online (Sandbox Code Playgroud)
我的观察是在 Tez 上运行时,Map-Join 在hive.auto.convert.join.noconditionaltask.size设置为足够高的值时工作, 即使hive.mapjoin.smalltable.filesize设置的值小于小表的大小。
为什么我们两者都需要
hive.auto.convert.join和hive.auto.convert.join.noconditionaltask?
在Apache文档非常混乱。
Jai*_*nik 10
这些参数用于决定何时在 hive 中使用Map Join反对Common join,这最终会影响最后的查询性能。
Map join当其中一个连接表小到可以放入内存时使用,因此速度非常快。这里是所有参数的解释:
hive.auto.convert.join
当此参数设置为 时true,Hive 将自动检查较小的表文件大小是否大于 指定的值hive.mapjoin.smalltable.filesize,如果大于此值,则通过公共联接执行查询。启用自动转换连接后,无需在查询中提供地图连接提示。
hive.auto.convert.join.noconditionaltask
当join涉及三个或更多表时,以及
hive.auto.convert.join = true - Hive 生成三个或更多 map-side 连接,并假设所有表的大小都较小。
hive.auto.convert.join.noconditionaltask = true, 如果 n-1 表的大小小于 10 MB,hive 会将三个或更多映射端连接合并为一个映射端连接。这里的大小由 定义hive.auto.convert.join.noconditionaltask.size。
hive.mapjoin.smalltable.filesize
这个设置基本上是告诉优化器你系统中小表的定义的方式。这个值定义什么是小表,然后当查询基于这个值执行时,它确定 join 是否有资格转换为map join.
hive.auto.convert.join.noconditionaltask.size
大小配置使用户能够控制什么大小的表可以放入内存。此值表示可以转换为适合内存的哈希图的表大小的总和。
这是非常好的解释链接,其中包括对所有 4 个参数的描述以及示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html
| 归档时间: |
|
| 查看次数: |
4486 次 |
| 最近记录: |