MapReduce中的Combiner组件

411 阅读1分钟

1、介绍

由于map端的并行度与数据相关,数据越多maptask的并行度越高,导致所有的计算任务全部在reducetask上,直接导致reduce节点压力过大。

如果map可以帮reduce分担一些压力,reduce端的性能肯定会提高,这时有了Combiner组件

2、作用

Combiner会减少reduce端的数据量,在map端做了一次合并,减少了shuffle过程的数据量,提高分布式计算程序的性能,Combiner帮助reduce分担压力,并且Combiner的业务逻辑和reduce中的业务逻辑一样

3、自定义

默认情况下没有Combine组件

自定义Combine:

  • 继承Reducer类
  • 重写reduce方法

注意事项

  • Combiner针对的是单个MapTask,不可以对多个MapTask的结果进行合并
  • Combiner和Reducer的区别在于运行的位置:Combiner是在每一个MapTask所在的节点运行,Reducer是接受全局的Mapper输出的结果
  • 对于网络密集型来说,Combiner的作用尤其明显