有人可以清楚地说明两者之间的区别吗
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
设置为小于小表的大小,Map-Join仍可工作。
为什么我们都需要
hive.auto.convert.join
和hive.auto.convert.join.noconditionaltask
?
Apache documentation非常混乱。
答案 0 :(得分:1)
这些参数用于确定在蜂巢中何时对Map Join
使用Common join
和Map join
,最终最终影响查询性能。
hive.auto.convert.join
用于连接表之一足够小以适合内存的情况,因此速度非常快。这是所有参数的说明:
true
当此参数设置为hive.mapjoin.smalltable.filesize
时,Hive将自动检查较小的表文件大小是否大于hive.auto.convert.join.noconditionaltask
指定的值,如果大于此值,则通过普通联接查询执行。启用自动转换联接后,无需在查询中提供地图联接提示。
hive.auto.convert.join = true
当三个或三个以上的表涉及联接时,
hive.auto.convert.join.noconditionaltask = true
-Hive假定所有表的大小较小,会生成三个或更多的地图侧联接。
hive.auto.convert.join.noconditionaltask.size
,如果n-1表的大小小于10 MB,则配置单元会将三个或更多映射侧联接合并为单个映射侧联接。大小由hive.mapjoin.smalltable.filesize
定义。
map join
此设置基本上是告诉优化程序系统中小表定义的方式。该值为您定义了什么是小表,然后在基于此值执行查询时,它确定联接是否有资格转换为hive.auto.convert.join.noconditionaltask.size
。
> Installing gem bundle
> You must use Bundler 2 or greater with this lockfile.
> Error during gem install
> failed during stage 'building site': Build script returned non-zero exit code: 1
> Error running command: Build script returned non-zero exit code: 1
> Failing build: Failed to build site
大小配置使用户可以控制什么大小的表可以容纳在内存中。该值表示可以转换为适合内存的哈希表的表大小的总和。
这是一个很好的说明链接,其中包括对所有4个参数的描述,并带有示例:
http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html