MapReducer中的多次归约处理
来源:互联网 发布:clip studio paint mac 编辑:程序博客网 时间:2024/05/16 05:21
我们知道,MapReduce是分为Mapper任务和Reducer任务,Mapper任务的输出,通过网络传输到Reducer任务端,作为输入。
在Reducer任务中,通常做的事情是对数据进行归约处理。既然数据来源是Mapper任务的输出,那么是否可以在Mapper端对数据进行归约处理,业务逻辑与Reducer端做的完全相同。处理后的数据再传送到Reducer端,再做一次归约。这样的好处是减少了网络传输的数量。
可能有人疑惑几个问题:
为什么需要在Mapper端进行归约处理?
为什么可以在Mapper端进行归约处理?
既然在Mapper端可以进行归约处理,为什么在Reducer端还要处理?
回答第一个问题:因为在Mapper进行归约后,数据量变小了,这样再通过网络传输时,传输时间就变短了,减少了整个作业的运行时间。
回答第二个问题:因为Reducer端接收的数据就是来自于Mapper端。我们在Mapper进行归约处理,无非就是把归约操作提前到Mapper端做而已。
回答第三个问题:因为Mapper端的数据仅仅是本节点处理的数据,而Reducer端处理的数据是来自于多个Mapper任务的输出。因此在Mapper不能归约的数据,在Reducer端有可能归约处理。
在Mapper进行归约的类称为Combiner。那么,怎么写Combiner哪?非常简单,就是我们自定义的Reducer类。那么,怎么用哪?更简单,见图6-5
<a href="http://www.superwu.cn/wp-content/uploads/2013/08/clip_image0013.png" class="cboxElement" rel="example4" 488"="" style="text-decoration: none; color: rgb(1, 150, 227);">
图6-5
看到图6-5的使用方法了吗,就是一行调用代码。
要注意的是,Combiner只在Mapper任务所在的节点运行,不会跨Mapper任务运行。Reduce端接收所有Mapper端的输出来作为输入。虽然两边的归约类是同一个,但是执行的位置完全不一样。
并不是所有的归约工作都可以使用Combiner来做。比如求平均值就不能使用Combiner。因为对于平均数的归约算法不能多次调用。
- MapReducer中的多次归约处理
- MapReducer中的多次归约处理
- 吴超-----MapReducer中的多次归约处理
- MPI中的归约
- CUDA归约处理——向量的内积
- 问题的归约
- 数据归约
- 数据归约
- 2.2 问题归约表示
- Reductionism and Holism in Programming 归约与整体哲学方法在程序设计中的应用
- Hadoop读书笔记(十)MapReduce中的从计数器理解combiner归约
- zju 2955 DP + 贪心归约
- MPI聚合通信之归约操作
- 编译原理的归约和推导
- 第5章-维度归约
- CUDA学习(归约算法)
- 数据预处理_数据归约03
- Java8 Stream 归约 使用示例
- 负数的BCD码表示
- XCode快捷键
- SSE2介绍及其简单用法举例
- Powershell连接数据库
- Servlet的生命周期
- MapReducer中的多次归约处理
- 用邻接矩阵存储有向图 输出各点的出度和入度
- 取出数据库中的重复记录
- 完全背包java实现
- 获得Android手机的ip的方法
- 同步synchronized方法和代码块
- Request对象的主要方法
- struts2中的值栈
- Hibernate常见配置