【Hadoop】7.MapReduce框架原理-Shuffle机制-7.3 Combiner合并

Combiner合并理论

  1. Combiner是MR程序中Mapper和Reducer之外的一种组件。
  2. Combiner组件的父类就是Reducer。
  3. Combiner和Reducer的区别在于运行的位置
    Combiner是在每一个MapTask所在的节点运行;
    Reducer是接受全局所有Mapper的输出结果
  4. Combiner的意义是对每一个Maptask的输出进行局部汇总,以减少网络传输量。
  5. 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实现步骤

  1. 自定义一个Combiner继承Reducer,重写Reduce方法
  2. 在Job驱动类中设置:
    job.setCombinerClass(XXXCombiner.class);

一般我们自定义的Combiner和Reduce的处理是一样的,所以一般我们就会设置reduce的实现类为Combiner
job.setCombinerClass(XXXReducer.class);

示例

在统计单词的案例中,我们就可以使用Combiner,直接设置为Reducer即可。

你可能感兴趣的:(hadoop,hadoop,mapreduce,combiner)