数据如下:
1->2
2->23
1->23
1->24
1->25
2->24
1->26
执行:
上述数据在MR的时候在一个Mapper的jvm下执行,那么他们在map和reduce两个阶段之间,一个MapReduce程序必须把mapper的输出分配到多个reducer上,这个过程叫做shuffling,因为一个mapper的输出结果有可能被分配到集群中的多个节点中去。为了避免网络数据的传输,需要提前在local进行shuffling,shuffling的目的是为了减少网络数据输出,那么就需要Combiner,Combiner是本地化的reduce
详情如下:
mapper1
1->2
2->23
1->23
1->24
mapper2
1->25
2->24
1->26
要求其每个key对应value的最大值,那么本地Combiner减少网络数据传输,执行如下:
Combiner1:
2->23
1->24
Combiner2:
2->24
1->26
reducer最终获得
2->24
1->26
Combiner减少了数据的传输