大数据学习之路22-数据倾斜场景

比如说又以下数据:

a a a a a a a a a a a a a a a a a a a a b

a a a a a a a c c b b c h h f d s h j

需要做wordcount,但是会有一个问题存在:a特别多,负责处理a这个单词数据的reduce worker就会很累(负载不均衡,过大)

这时有一种解决办法就是使用Combiner,其实Combiner和Reducer的写法一模一样,只不过Combiner是提供给map task使用的而Reducer是提供给reduce使用的。Combiner的作用是在将任务交给Reducer使用之前做一些合并操作,减轻Reducer的负担,但是这种方法解决负载的问题也不是很好。而且这种方法一般也不会轻易使用,因为这种方法存在一些问题(如下图):

大数据学习之路22-数据倾斜场景

更好一点的方法是这样的思路:

将key进行打散(具体方案:给key拼接一个随机字符串或数字),以均衡reduce端worker的负载,分两次进行mapreduce,第二次mapreduce的时候将拼接的随机字符串或数字去除即可。