换个角度理解云计算之MapReduce(二)
接上篇
3.Combiner操作
前面讲完Map操作,总结一下就是:一个大文件,分成split1~5,对应于Map1~5,每一个Map处理一个split,每一个split的每一行,会用每一个Map的map方法去处理,经过上面操作,最终输出了5个中间结果。
对于这5个中间结果的每一个来说,都有很多行,每一行是key value格式的,如hello 1,这样子,在传给Reducer之前,为了减少传输的数据量,可以增加一个Combiner过程,把每个中间结果进行化简。因为每个中间结果可能有相同的键值的行,如:hello 1,hello 1,通过combiner,就可以合并成一行:hello 2.
切记:Combiner是Mapper任务的一部分,紧随map方法之后。看起来类似Reduce的操作。
之后,就可以把Combiner的输出传入Reducer,而不是Map的输出传入Reducer。Combiner需要自己指定,当然也可以不写。
4.Reducer操作
Reduce操作分成了三个过程
(1)Shuffle
前面的Map或者Combiner的输出,一共有有5份中间结果,其中的每一份结果,按照Key值可以分成(预先定义的R份),由R个Reduce来操作(通过Partitioner接口完成)。因此R个Reduce需要向5个中间结果都取一段数据,5个中间结果的其中每一结果是由R个Reduce操作的。
简单来说:对于其中某一个个Reduce1来说,分别从Map1~Map5里面把需要的那一份copy至本地,然后再合并Merge一下,供Sort使用。
(2)Sort
对于每一个Reduce来说,进来的数据为5个中间结果的中的一段,即Shuffle的结果,里面可能有重复的key,因此作为Reduce输入之前,会有一个sort操作,把相同Key的整合一下,例如<hello,1>,<hello,1>整合成<hello,(1,1)>,作为Reduce的输入,所以Reduce的输入的value一般是Iterable的。
(3)Reduce
这里是我们编写程序的地方了,一共R个Reduce,就能产生R个中间结果了。
注意:shuffle、sort、Reduce是在Reduce节点完成的,而不是在Map节点完成,有些书籍上写的是错的!
啰啰嗦嗦竟然讲了这么多,上一个我自己随手画的图,凑合看吧。

(完)
文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
- 本文为原创文章,欢迎转载,后续本博客会不断更新,因此请保留该文档信息。
- 本文地址:http://www.cnblogs.com/wuguanglei/p/4034575.html
换个角度理解云计算之MapReduce(二)的更多相关文章
- 换个角度理解云计算之MapReduce
上一篇简单讲了一下HDFS,简单来说就是一个叫做“NameNode”的大哥,带着一群叫做“DataNode”的小弟,完成了一坨坨数据的存储,其中大哥负责保存数据的目录,小弟们负责数据的真正存储,而大哥 ...
- 换个角度理解云计算之HDFS
学习云计算,必然得了解Hadoop,而Hadoop中的HDFS(分布式文件系统)是一个基础,接下来就写一下我所理解的HDFS. 有一个很有特别的村庄,村庄里面有一个很牛逼的人,叫做“大哥”,村民们都信 ...
- (转)MapReduce二次排序
一.概述 MapReduce框架对处理结果的输出会根据key值进行默认的排序,这个默认排序可以满足一部分需求,但是也是十分有限的.在我们实际的需求当中,往往有要对reduce输出结果进行二次排序的需求 ...
- Hadoop学习笔记: MapReduce二次排序
本文给出一个实现MapReduce二次排序的例子 package SortTest; import java.io.DataInput; import java.io.DataOutput; impo ...
- 深入理解C指针之二:C内存管理
原文:深入理解C指针之二:C内存管理 内存管理对所有程序来说都很重要.有时候内存由运行时系统隐式的管理,比如为变量自动分配内存.在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧, ...
- 菜鸟玩云计算之十二:KVM虚拟机更改大小
菜鸟玩云计算之十二:KVM虚拟机更改大小 参考: http://www.missionfamilybank.org/expanding-resizing-your-qcow2-virtual-mach ...
- 深入理解Spring AOP之二代理对象生成
深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...
- 云计算设计模式(二十三)——Throttling节流模式
云计算设计模式(二十三)——Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这种模式可以允许系统继续运行并满足服务水平协议,即使当增加需求的资源放置一 ...
- 云计算设计模式(二十一)——Sharding分片模式
云计算设计模式(二十一)——Sharding分片模式 将一个数据存储到一组水平分区或碎片.存储和访问大量数据时,这个模式可以提高可扩展性. 背景和问题 由一个单一的服务器托管的数据存储区可能会受到以下 ...
随机推荐
- Crystal Reports拉报表报错:Error detected by database DLL
问题描述: 最近在使用Crystal Reports打印报表时,提示错误信息:"Error detected by database DLL." 如下图: 经查找,是因为数据库名称 ...
- 多层嵌套ajax同步
方式一: $.ajax({ type : "post", url : "user/add", data : data, async : false, //必须为 ...
- jQuery常用的插件及功能汇总-持续
1.图片轮播 jquery.soChange.js 2.滚动展示 MSClass.js 3.md5加密 md5.js 4.cookie操作 cookie.js 5.
- ready与onload的性能
<!DOCTYPE html> <html> <head> <title>ready与onload的性能</title> <meta ...
- LoopBackJS 之 文件上传下载——使用loopback-component-storage
参考链接: http://loopback.io/doc/en/lb2/Storage-component.html#creating-a-storage-component-data-source ...
- Win7 64位 VS2013环境cuda_7.5.18的一些坑
thrust库的sort算法,在x86平台使用就崩溃,x64就没问题,搜了下好像是很早的版本,4开始就有这样的问题了,原因不明. http://stackoverflow.com/questions/ ...
- Learning ROS for Robotics Programming - Second Edition(《学习ROS机器人编程-第二版》)
Learning ROS for Robotics Programming - Second Edition <学习ROS机器人编程-第二版> ----Your one-stop guid ...
- 【转载】为什么V8引擎这么快?
原文地址:http://blog.csdn.net/horkychen/article/details/7761199
- Windows phone8.1教务在线客户端
本人是个大二学生,由于学校的教务在线一直没出windows phone的教务在线,而且本身也对wp开发感兴趣,所以就尝试着开发一下 由于没有系统的学习,只能在摸索中前进,这背后的原理很简单,可不容易实 ...
- Python学习笔记1——Python基础
一. 数据类型和变量 整数:十六进制用0x前缀和0-9,a-f表示 浮点数:小数,科学计数法:10用e代替:整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(包括除法),浮点数运算则可 ...