5

有人可以清楚地解释两者之间的区别吗

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

4

1 回答 1

12

这些参数用于决定何时在 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

这个设置基本上是告诉优化器在你的系统中定义小表的方式。此值为您定义什么是小表,然后当基于此值执行查询时,它确定 join 是否有资格转换为map join.

hive.auto.convert.join.noconditionaltask.size

大小配置使用户能够控制内存中可以容纳的大小表。该值表示可以转换为适合内存的哈希图的表大小的总和。

这是一个很好的解释链接,其中包括所有 4 个参数的描述和一个示例:

http://www.openkb.info/2016/01/difference-between-hivemapjoinsmalltabl.html

于 2019-02-16T20:32:31.343 回答