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,则查询结束。
答案 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;