本文主要是介绍【Hadoop】7.MapReduce框架原理-Shuffle机制-7.3 Combiner合并,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Combiner合并理论
- Combiner是MR程序中Mapper和Reducer之外的一种组件。
- Combiner组件的父类就是Reducer。
- Combiner和Reducer的区别在于运行的位置
Combiner是在每一个MapTask所在的节点运行;
Reducer是接受全局所有Mapper的输出结果 - Combiner的意义是对每一个Maptask的输出进行局部汇总,以减少网络传输量。
- Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。
比如求平均值:
MapTask | ReduceTask |
---|---|
(5+3+7) / 3 = 5 和 (1+5) / 2 = 3 | (5+3+7+1+5) / 5 = 4.2 |
显然这样的Combiner不可以
但是
MapTask | ReduceTask |
---|---|
(5+3+7) = 15 和 (1+5) = 6 | (5+3+7+1+5) = 21 |
汇总就是可以的。
自定义Combiner实现步骤
- 自定义一个Combiner继承Reducer,重写Reduce方法
- 在Job驱动类中设置:
job.setCombinerClass(XXXCombiner.class);
一般我们自定义的Combiner和Reduce的处理是一样的,所以一般我们就会设置reduce的实现类为Combiner
job.setCombinerClass(XXXReducer.class);
示例
在统计单词的案例中,我们就可以使用Combiner,直接设置为Reducer即可。
这篇关于【Hadoop】7.MapReduce框架原理-Shuffle机制-7.3 Combiner合并的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!