0
点赞
收藏
分享

微信扫一扫

MapReduce中的combiner

老榆 2022-10-31 阅读 68


目录

​​介绍: ​​

​​设计思想: ​​

​​优点:​​

​​缺点:​​

​​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的输出进行局部汇总,以减小网络传输量

设计思想: 

MapReduce中的combiner_设计思想

优点:

局部聚合的组件,针对每个maptask进行局部聚合运算 是一种优化手段

局部聚合之后 减少了map和reduce之间跨网络传递的数据量 减少网络IO

缺点:

对于涉及业务跟顺序 个数这样相关的 不能使用combiner 因为局部使用之后会改变最终的结果

combiner本身就是reducer 只不过应用的范围只限于maptask输出 不是全局

eg:(使用combiner数据结果变化)

MapReduce中的combiner_设计思想_02

使用:

自定义一个combiner继承Reducer,重写reduce方法

在job中设置:  job.setCombinerClass(CustomCombiner.class)

 job中设置:

 如果开启combiner 需要在job进行设置。

注意事项:

combiner能够应用的前提是不能影响最终的业务逻辑,而且,combiner的输出kv应该跟reducer的输入kv类型要对应起来

 eg:(job设置)

目录结构:

MapReduce中的combiner_设计思想_03

代码设置: 

job.setCombinerClass(WordCountReducer.class);

设置位置:

MapReduce中的combiner_mapreduce_04

 

输出(查看日志):

MapReduce中的combiner_设计思想_05

 

 

举报

相关推荐

0 条评论