配置单元Map连接配置

6rqinv9w  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(377)

有人能清楚地解释一下

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文档非常混乱。

pu82cl6c

pu82cl6c1#

这些参数用于决定何时使用 Map Join 反对 Common join 在配置单元中,这最终会影响查询性能。 Map join 当一个联接表足够小,可以放入内存时使用,因此速度非常快。以下是所有参数的说明: hive.auto.convert.join 当此参数设置为 true ,配置单元将自动检查较小的表文件大小是否大于 hive.mapjoin.smalltable.filesize ,如果大于此值,则通过公共联接执行查询。一旦启用了自动转换联接,就不需要在查询中提供Map联接提示。 hive.auto.convert.join.noconditionaltask 当连接中涉及三个或更多表时,以及 hive.auto.convert.join = true -hive生成三个或更多的map-side连接,并假设所有表的大小都较小。 hive.auto.convert.join.noconditionaltask = true ,如果n-1表的大小小于10 mb,配置单元会将三个或更多的Map端联接合并为一个Map端联接。这里的大小由 hive.auto.convert.join.noconditionaltask.size . hive.mapjoin.smalltable.filesize 这个设置基本上是告诉优化器系统中小表的定义的方法。这个值为您定义什么是小表,然后当查询基于这个值执行时,它确定联接是否有资格转换为 map join . hive.auto.convert.join.noconditionaltask.size 大小配置允许用户控制表在内存中的大小。此值表示可转换为适合内存的哈希Map的表大小之和。
下面是一个非常好的解释链接,其中包括对所有4个参数的描述,并提供了一个示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html

相关问题