map-reduce阶段中的数据倾斜问题

MapReduce数据倾斜:
mapreduce处理过程有一个特点,相同的key,只能是发给同一个reduce进行处理。

原因:hadoop源码中有一行代码,(key.hashcode())%numReduce,先把key进行hash然后除以reduce的个数取余,相同的key的hashcode肯定一样,而且reduce数也确认,那肯定是相同的key都发给了同一个reduce了

举例:假设普通的key的value数是100个,而就有些个别的key的value数是10万个,这时普通的key对应的reduce处理很快,而个别的key对应的reduce显然会处理的很慢(它的处理10万),这样就会造成不平衡。
而对于提交的作业(job)什么时候才算运行结束呢?是要等到最后一个reduce执行完,才算结束。所以执行量小的reduce先执行完了,也得等着,等着量最大的、最慢的执行完,才能够算结束。

再说,造成数据倾斜的根本原因是什么:2点
1.key分布不均衡,有的则过于集中。倾斜在reduce阶段
2.datanode上数据分布不均衡。倾斜在map阶段。解释:datanode上的数据量大当然执行的时间要长。数据量小的则执行时间短。但是,这个地方有个特点:map执行完后,不用等其他map执行完,就开始执行下一个阶段了,但reduce阶段就不一样了,整个作业的执行完成,必须要等到最后一个reduce跑完(合情合理)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值