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.joinhive.auto.convert.join.noconditionaltask?

Apache documentation 非常混乱。

【问题讨论】:

【参考方案1】:

这些参数用于决定何时在 hive 中使用 Map JoinCommon 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 配置之谜的主要内容,如果未能解决你的问题,请参考以下文章

hive高级操作(优化,数据倾斜优化)

德国博兰斯勒HIVE水晶未来之谜钢琴中国首秀!豪华阵容亮相上海乐展!

一分价钱一分货,揭露香港服务器市场价格混乱之谜

译丨webpack 之谜

为什么手机无法运行应用? Values之谜

解开Android应用程序组件Activity的"singleTask"之谜