每一个map都可能产生大量的本地输出, Combiner的作用就是对map端的输出先做一次合并, 以减少在map和reduce节点之间的数据传输量,以提高网络IO性能, 是MapReduce的一种优化手段。
-
combiner是MR程序中Mapper和Reducer之外的一种组件
-
combiner组件的父类就是Reducer
-
combiner和reducer的区别在于运行的位置:
Combiner是在每一个maptask所在的节点运行
Reduce是接受全局所有Mapper的输出结果
-
combiner的意义就是对每一个maptask的输出进行全局汇总, 以减少网络传输量
具体实现步骤:
-
自定义一个combiner继承Reducer, 重写reduce方法
-
在job中设置:job.setCombinerClass(CustomCombiner.class)
- combiner能够应用的前提是不能影响最终的业务逻辑, 而且, combiner的输出要和reducer的输入kv类型对应起来
参考资料:
【1】 腾讯课堂-大数据hadoop入门