码迷,mamicode.com
首页 > 其他好文 > 详细

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

时间:2019-06-14 22:20:44      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:iter   产生   tca   程序   过程   网络io   类型   输入   mapr   

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络IO 性能,是 MapReduce 的一种优化手段之一。

?   combiner 是 MR 程序中 Mapper 和 Reducer 之外的一种组件

?   combiner 组件的父类就是 Reducer

?   combiner 和 reducer 的区别在于运行的位置:

Combiner 是在每一个 maptask 所在的节点运行 Reducer 是接收全局所有 Mapper 的输出结果;

?   combiner 的意义就是对每一个 maptask 的输出进行局部汇总,以减小网络传输量

?   具体实现步骤:

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

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

 

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

 

代码:

SortMain:
添加如下代码
//设置第五步:规约
job.setCombinerClass(SortCombiner.class);

SortCombiner:
package cn.itcast.demo2.sort;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
/**
* 注意自定义combiner的话,输入类型和输出类型,都是key2 value2
* 作用:减少输出到reduce的key2的个数
*/
public class SortCombiner extends Reducer<PairSort,Text,PairSort,Text> {
@Override
protected void reduce(PairSort key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
//这里面写规约的逻辑
for (Text value:values){
context.write(key,value);
}
}
}

第2节 mapreduce深入学习:7、MapReduce的规约过程combiner

标签:iter   产生   tca   程序   过程   网络io   类型   输入   mapr   

原文地址:https://www.cnblogs.com/mediocreWorld/p/11025441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!