Hive Map-Join 配置之谜
Posted
技术标签:
【中文标题】Hive Map-Join 配置之谜【英文标题】:Hive Map-Join configuration mystery 【发布时间】:2019-02-16 18:07:30 【问题描述】:谁能解释清楚有什么区别
hive.auto.convert.join
和
hive.auto.convert.join.noconditionaltask
配置参数?
还有这些对应的尺寸参数:
hive.mapjoin.smalltable.filesize
和
hive.auto.convert.join.noconditionaltask.size
我的观察是在 Tez 上运行时,当 hive.auto.convert.join.noconditionaltask.size
设置为足够高的值时,即使 hive.mapjoin.smalltable.filesize
设置小于小表的大小,Map-Join 也可以工作。
为什么我们两个都需要
hive.auto.convert.join
和 hive.auto.convert.join.noconditionaltask
?
Apache documentation 非常混乱。
【问题讨论】:
【参考方案1】:这些参数用于决定何时在 hive 中使用 Map Join
和 Common join
,最终影响查询性能。
Map join
用于连接表之一小到足以放入内存的情况,因此速度非常快。以下是所有参数的解释:
hive.auto.convert.join
当此参数设置为true
时,Hive会自动检查较小的表文件大小是否大于hive.mapjoin.smalltable.filesize
指定的值,如果大于该值则通过common join查询执行。启用自动转换连接后,无需在查询中提供地图连接提示。
hive.auto.convert.join.noconditionaltask
当连接涉及三个或更多表时,并且
hive.auto.convert.join = true
- Hive 生成三个或更多映射端连接,并假设所有表的大小都较小。
hive.auto.convert.join.noconditionaltask = true
,如果 n-1 表的大小小于 10 MB,hive 会将三个或更多 map-side join 组合成一个 map-side join。这里的大小由hive.auto.convert.join.noconditionaltask.size
定义。
hive.mapjoin.smalltable.filesize
这个设置基本上是告诉优化器在你的系统中定义小表的方式。该值为您定义了什么是小表,然后当根据该值执行查询时,它确定连接是否有资格转换为map join
。
hive.auto.convert.join.noconditionaltask.size
大小配置使用户能够控制内存中可以容纳的大小表。该值表示可以转换为适合内存的哈希图的表大小的总和。
这是一个很好的解释链接,其中包括所有 4 个参数的描述和一个示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html
【讨论】:
非常感谢这个链接和解释! 我如何决定我可以给属性hive.mapjoin.smalltable.filesize
的最大尺寸以上是关于Hive Map-Join 配置之谜的主要内容,如果未能解决你的问题,请参考以下文章