配置单元左外连接长时间运行

qgzx9mmu  于 2021-06-29  发布在  Hive
关注(0)|答案(2)|浏览(404)

hortonworks hdp 2.3.0-Hive0.14 Table T1 ( partition on col1, no bucket, ORC ) 应用程序1.2亿行和6gb数据大小 Table T2 ( partition on col2, no bucket, ORC ) 约200 m行和6mb数据大小

T1 left outer join on t2 ( t1.col3 = t2.col3 )

上面的查询在tez和mr模式下的最后一个reducer阶段都长时间运行。我还尝试了自动转换true/false和显式mapjoin。
查询仍在最后一个阶段运行,从未结束。
仅供参考-如果t2的数据大小为9k或1gb,则查询完成。

ykejflvf

ykejflvf1#

但是您是否尝试过为自动转换联接指定大小,尝试过为可以放入内存的小表指定大于的大小。
设置hive.auto.convert.join.noconditionaltask.size=10000000;

cx6n0qe3

cx6n0qe32#

问题可能是每个减速机有太多字节/行。如果应用程序执行被卡在最后一个缩减器中,那么很可能是数据倾斜。要检查它,请从两个表中选择top5col3,skew是指有许多记录具有相同的键值(比如30%)。如果是一个歪斜,那么尝试单独连接歪斜键,然后用所有其他键联合所有键。像这样:

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配置单元设置,可能它太高了。

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

相关问题