mapreduce之combiner函数

一个例子说明combiner的作用:hadoop允许用户针对map任务输出指定一个combiner,combiner函数的输出作为reduce的输入

(1)假设第一个map的输出如下:
(1950,0)//1950表示年份,0表示地方A的最高温度
(1950,20)
(1950,10)

(2)假设第二个map的输出如下:
(1950,25)//1950表示年份,0表示地方A的最高温度
(1950,15)

(3)reduce函数被调用,输入如下:
(1950,[0,20,10,25,15])

(4)如果是使用combiner函数找出每个map任务输出结果中的最高温度。如此一来,reduce的数据如下:
(1950,[20,25])

在job中加入combiner函数:

job.setConbinerClass(MaxTemperarureReducer.class);//在job中加入combiner函数

注:combiner的优点是可以减少map传给reduce的数据量

下面以wordcount为例:

public class WordcountCombiner extends Reducer<Text, IntWritable, Text, IntWritable>{

	@Override
	protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

		int count=0;
		for(IntWritable v: values){
			
			count += v.get();
		}
		context.write(key, new IntWritable(count));	
	}
}

增加这样一个combiner如果遇到重复率很高的数据就可以用类似字典树的方法压缩数据解决了,如果有10000个z,原来需要发送10000次<z,1>的数据给reduce,现在只需要发一个<z,10000>即可,大大减小了网络传输的数据量,但是使用combiner一定不能影响最终结果才行。

全部评论

相关推荐

Beeee0927:是缅甸园区吗
点赞 评论 收藏
分享
面向对象的火龙果很爱...:去吃一顿炸鸡就走
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
07-11 11:15
中南大学 Java
好可爱的hr姐姐哈哈哈哈
黑皮白袜臭脚体育生:兄弟们貂蝉在一起,吕布开了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务