比如说又以下数据:
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的负担,但是这种方法解决负载的问题也不是很好。而且这种方法一般也不会轻易使用,因为这种方法存在一些问题(如下图):