目录
介绍:
设计思想:
优点:
缺点:
eg:(使用combiner数据结果变化)
使用:
job中设置:
eg:(job设置)
介绍:
每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一。
- combiner是MR程序中Mapper和Reducer之外的一种组件
- combiner组件的父类就是Reducer
- combiner和reducer的区别在于运行的位置:
Combiner是在每一个maptask所在的节点运行
Reducer是接收全局所有Mapper的输出结果;
- combiner的意义就是对每一个maptask的输出进行局部汇总,以减小网络传输量
设计思想:
优点:
局部聚合的组件,针对每个maptask进行局部聚合运算 是一种优化手段
局部聚合之后 减少了map和reduce之间跨网络传递的数据量 减少网络IO
缺点:
对于涉及业务跟顺序 个数这样相关的 不能使用combiner 因为局部使用之后会改变最终的结果
combiner本身就是reducer 只不过应用的范围只限于maptask输出 不是全局
eg:(使用combiner数据结果变化)
使用:
自定义一个combiner继承Reducer,重写reduce方法
在job中设置: job.setCombinerClass(CustomCombiner.class)
job中设置:
如果开启combiner 需要在job进行设置。
注意事项:
combiner能够应用的前提是不能影响最终的业务逻辑,而且,combiner的输出kv应该跟reducer的输入kv类型要对应起来
eg:(job设置)
目录结构:
代码设置:
job.setCombinerClass(WordCountReducer.class);
设置位置:
输出(查看日志):