记一次批量型数据倾斜的hive优化

6 篇文章 0 订阅
4 篇文章 0 订阅

问题概述

CREATE TABLE  answer as 
select * from a 
left join b 
on a.model_id=b.model_id 
left join c 
on a.model_id=c.model_id;
  • 其中表a四千万行,b,c仅仅百万行,但是这个结果的reduce阶段却跑了12个小时,原本2GB的数据,生成了2T数据,150亿行数据。这是为什么呢???

分析

理解这个问题前游戏要了解一下hive join 的mr 原理join原理浅析

  • 那怎们确定是数据倾斜呢,其实你看每个reduce的运行时间即可得知。
  • 然后进一步的我研究了数据源 a,b,c关联键 model_id的特征
    首先求一下每个model_id的个数,并排个序
model_id
72786
72786
70511
70511
69580
69580
68087
68087
67032

由此可见关联键重复严重,并且三张表的关联键都有不同程度的重复,然后在根据mr的join的原理,你就很容易理解为啥这么慢,为啥2G生成2T。

在这里插入图片描述

问题解决

因为是reduce 的压力大,

  • 所以增加reduce的个数,
  • 去重distinct,因为reduce慢的原因无非就是疯狂的写磁盘(因为生成了151亿条数据),而这些个本身就有很多的重复,所以去重后就会减少磁盘io
  • join前对model_id去重。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值