蜂巢左外连接长时间运行

时间:2016-05-23 18:26:46

标签: hive

Hortonworks HDP 2.3.0 - Hive 0.14

表T1(col1上的分区,无桶,ORC)应用程序1.2亿行& 6GB datasize 表T2(col2上的分区,无桶,ORC)app 200 M行& 6MB datasize

T1在t2上留下外连接(t1.col3 = t2.col3)

以上查询长期在tez&的最后一个reducer阶段运行。先生的模式。 我也试过自动转换真/假&显式mapjoin。

查询仍在最后一个reducer阶段运行,永无止境。

仅供参考 - 如果T2的数据大小为9k或1GB,则查询结束。

2 个答案:

答案 0 :(得分:0)

问题可能是每个reducer有太多字节/行。如果应用程序执行停留在最后一个单个缩减器中,那么它很可能是数据偏斜。要检查它,从两个表中选择前5个col3,当存在大量具有相同键值的记录时(例如30%),则倾斜。如果它是一个倾斜,那么尝试单独加入skew键,然后加入所有其他键的UNION ALL。像这样:

select * from
T1 left outer join on t2 on ( t1.col3 = t2.col3 ) and t1.col3=SKEW_VALUE
union all
select * from
T1 left outer join on t2 on ( t1.col3 = t2.col3 ) and t1.col3<>SKEW_VALUE 

如果应用程序执行停留在最后一个reducer阶段,而不是一个reducer或几个reducer,那么检查bytes.per.reducer hive设置,可能它太高了。

set hive.exec.reducers.bytes.per.reducer=67108864;

答案 1 :(得分:0)

但是你试过给自动转换加入的大小,试试给出大小&gt;而不是适合记忆的小桌子。

  

set hive.auto.convert.join.noconditionaltask.size = 10000000;