环境:公司决定使用宽表,将10个相关的大表进行全量关联
(1个上亿级别的表,5个上千万的表,剩下的表都不到百万的表)
花了两天的时间研究,测试
例如: a~g这几个表中,a表为上亿级别的表,5个上千万的表,剩下为表都百万的表
select a.uesrid,b.citycode,b.register_num, ... ,g.active_num
from
(select userid,citycode from a)
left outer join
(select userid,register_num from b)
on (a.userid=b.userid)
...
left outer join
(select userid,active_num from g)
on (a.userid=b.userid)
你会发现
最后一个job异常慢,并且reduce为1。
也多人会说,你傻逼呀,设置reduce数呀,对这是一个好办法,但是结果如何呢?
#设置传输格式
set mapred.output.compress=true;
set hive.ex

本文讲述了在处理上亿级别数据表关联时遇到的性能问题,通过研究发现,由于使用了order by、笛卡尔积等操作导致Hive只分配了一个reduce任务。通过增加聚合函数、调整表关联顺序以及启用并行执行,成功将运行时间从3小时降低到15分钟,实现了调优。同时,文章提醒注意并行执行的资源需求,并鼓励IT领域的知识分享与交流。

338

被折叠的 条评论
为什么被折叠?



