关于map-reduce涉及数据倾斜调优问题

今天在hive任务跑批碰到了失败的问题,报错基本都是container killed,进一步看了任务日志,发现是某一个reducer失败了 耗时特别长,继续看了是在distribute by 这个算子涉及的MR任务的原因

(一个脚本中会涉及到很多个MR任务)

首先回顾下 distribute by 算子 一般是放在最后写文件 ,比如insert overwrite 操作之后进行,大概有distribute by rand() 和  distribute by partitions,后者一般用于多级分区的时候,目的是为了避免出现随机小文件的问题,区别是后者按照分区进行shuffle然后reducer计算,有几个key就有几个reducer,可能导致数据倾斜,前者是随机分发到set的reducer数量上,比如set有50个reducer,就平均分发到50个reducer进行计算。

回到这次的问题,是由于最后distribute by时候涉及的MR任务中某一个reducer时间过长,明显是数据倾斜问题。代码中最后是distribute by partitions,但是由于其中一个分区的某一个key值对应的数据量占了九成,导致对应的那个reducer在处理的时候hold不住了

解决办法:改成distribute by rand(),让50个reducer平均处理文件,避免了数据倾斜的情况,大大 提升了计算效率

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值