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的作用尤其明显