about云开发-活到老 学到老

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 38343|回复: 11

Mapper过程中Combiner的作用

[复制链接]
发表于 2014-3-9 20:16:21 | 显示全部楼层 |阅读模式
我们可以带着下面问题来阅读
为什么需要在Mapper端进行归约处理?
为什么可以在Mapper端进行归约处理?
既然在Mapper端可以进行归约处理,为什么在Reducer端还要处理?


我们知道,MapReduce是分为Mapper任务和Reducer任务,Mapper任务的输出,通过网络传输到Reducer任务端,作为输入。

在Reducer任务中,通常做的事情是对数据进行归约处理。既然数据来源是Mapper任务的输出,那么是否可以在Mapper端对数据进行归约处理,业务逻辑与Reducer端做的完全相同。处理后的数据再传送到Reducer端,再做一次归约。这样的好处是减少了网络传输的数量。

回答第一个问题:因为在Mapper进行归约后,数据量变小了,这样再通过网络传输时,传输时间就变短了,减少了整个作业的运行时间。

回答第二个问题:因为Reducer端接收的数据就是来自于Mapper端。我们在Mapper进行归约处理,无非就是把归约操作提前到Mapper端做而已。

回答第三个问题:因为Mapper端的数据仅仅是本节点处理的数据,而Reducer端处理的数据是来自于多个Mapper任务的输出。因此在Mapper不能归约的数据,在Reducer端有可能归约处理。

在Mapper进行归约的类称为Combiner。那么,怎么写Combiner哪?非常简单,就是我们自定义的Reducer类。那么,怎么用哪?更简单,见图

无标题.png

看到上图的使用方法了吗,就是一行调用代码。

要注意的是,Combiner只在Mapper任务所在的节点运行,不会跨Mapper任务运行。Reduce端接收所有Mapper端的输出来作为输入。虽然两边的归约类是同一个,但是执行的位置完全不一样。

并不是所有的归约工作都可以使用Combiner来做。比如求平均值就不能使用Combiner。因为对于平均数的归约算法不能多次调用。


欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

0

主题

359

帖子

1153

积分

高级会员

Rank: 4

积分
1153
发表于 2015-3-7 14:08:53 | 显示全部楼层

0

主题

164

帖子

1147

积分

高级会员

Rank: 4

积分
1147
发表于 2015-3-27 13:15:37 | 显示全部楼层
带着问题学习的方式,学习了!

0

主题

12

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2015-6-3 14:28:53 | 显示全部楼层
学习了 学习了。

0

主题

24

帖子

138

积分

注册会员

Rank: 2

积分
138
发表于 2015-7-1 16:47:09 | 显示全部楼层
分析得不错

2

主题

20

帖子

117

积分

注册会员

Rank: 2

积分
117
发表于 2015-7-3 01:03:21 | 显示全部楼层
那么COMBINE以后。再进行分区。。。分区之后还存在倾斜也就是工作量不平衡的问题么。。

0

主题

17

帖子

161

积分

注册会员

Rank: 2

积分
161
发表于 2016-2-1 11:21:27 | 显示全部楼层
就是喜欢楼主酱紫的好人,提前祝楼主新年快乐!

0

主题

15

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2016-2-12 16:46:03 | 显示全部楼层
写的好,学习了

0

主题

9

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2016-7-25 18:53:37 | 显示全部楼层
不错的教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

QQ|小黑屋|about云开发-学问论坛|社区-大数据云技术学习分享平台 ( 京ICP备12023829号

GMT+8, 2018-4-24 18:42 , Processed in 0.455983 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表