繁体   English   中英

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

我的观察是在hive.auto.convert.join.noconditionaltask.size上运行时,即使hive.mapjoin.smalltable.filesize设置的小于小表的大小,当hive.auto.convert.join.noconditionaltask.size设置为足够高的值时,Map-Join 也能工作。

为什么我们两者都需要

hive.auto.convert.joinhive.auto.convert.join.noconditionaltask

Apache 文档非常混乱。

这些参数用于决定何时在 hive 中对Common join使用Map Join ,这最终会影响最后的查询性能。

当连接表之一小到足以放入内存时,使用Map join ,因此速度非常快。 这里是所有参数的解释:

hive.auto.convert.join

当此参数设置为true ,Hive 将自动检查较小的表文件大小是否大于hive.mapjoin.smalltable.filesize指定的值,如果大于此值,则通过 common join 执行查询。 启用自动转换连接后,无需在查询中提供地图连接提示。

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 会将三个或更多 map-side join 合并为一个 map-side join。 这里的大小由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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM