- 核心意义 :减少集群之间的网络开销
- 具体实现步骤
- 1.自定义一个Combiner 继承 reduce 重写reduce方法
- 2.在 job 中设置:job.setCombinerClass(Combiner类.class)
注意:
combiner 能够应用的前提是不能影响最终的业务逻辑,而且,combiner 的输出 kv 应该跟 reducer 的输入 kv 类型要对应起来
不适用的场景:
求平均数 会出现 最终数据不一致的问题
为什么要用Combiner
- 每一个map 都有可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一.
- Combiner 是 MR程序中 mapper 和Reduce 之外的一种组件
- Combinner 组件的父类就是Reducer
- Combinner和Reduce的区别在于运行的位置
- Combinner是在每一个maptask所在的节点运行Reducer 是接受全局所有mapper的输出结果
- Combinner的意义就是对每一个maptask的输出进行局部汇总,以减少网络传输量