Hortonworks HDP 2.3.0 - Hive 0.14
Table T1 ( partition on col1, no bucket, ORC )
应用程序 1.2 亿行和 6GB 数据大小Table T2 ( partition on col2, no bucket, ORC )
应用程序 2 亿行和 6MB 数据大小
T1 left outer join on t2 ( t1.col3 = t2.col3 )
上面的查询在 tez 和 mr 模式下的最后一个减速器阶段都长时间运行。
我还尝试了自动转换真/假和显式映射连接。
查询仍然在最后一个减速器阶段运行,永远不会结束。
仅供参考 - 如果 T2 的数据大小为 9k 或 1GB,则查询完成。
问题可能是每个减速器有太多字节/行。如果应用程序执行卡在最后single那么很可能是数据倾斜。要检查它,请从两个表中选择前 5 个 col3,倾斜是指有大量记录具有相同键值(例如 30%)。如果是倾斜,则尝试单独加入倾斜键,然后将所有其他键加入 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)