MapReduce数据并行计算模型介绍

1、MapReduce来龙去脉  

MapReduce是一个说难懂也难懂、说好懂也好懂的概念。 
说它难懂,是因为,如果你只理论上的去学习、去理解,确实很难懂。 
说它好懂,是因为,如果你亲手在hadoop运行过几个MapReduce的job,并稍微学点hadoop的工作原理,基本上也就理解MapReduce的概念了。 

所以,有句话说的特别好:“如果将编程比作运动的话,那么它绝对不是表演项目,而是竞技项目。”(摘自《Erlang程序设计》第10页) 

但是,在这里,我还是想向不了解MapReduce的同学们介绍一下MapReduce。 
MapReduce借用了函数式编程的概念,是google发明的一种数据处理模型。因为google几乎爬了互联网上的所有网页,要为处理这些网页并为搜索引擎建立索引是一项非常艰巨的任务,必须借助成千上万台机器同时工作(也就是分布式并行处理),才有可能完成建立索引的任务。 

所以,google发明了MapReduce数据处理模型,而且他们还就此发表了 相关论文 。 


后来,Doug Cutting老大就根据这篇论文硬生生的复制了一个MapReduce出来,也就是今天的Hadoop。如果没听说过hadoop,请参考 《hadoop扫盲篇》 。 


2、MapReduce工作过程  

知道了MapReduce是分布式数据处理编程模型后,下面我们看看它是怎么工作的。 

MapReduce处理数据过程主要分成2个阶段:map阶段和reduce阶段。先执行map阶段,再执行reduce阶段。 

1) 在正式执行map函数前,需要对输入进行“分片”(就是将海量数据分成大概相等的“块”,hadoop的一个分片默认是64M),以便于多个map同时工作,每一个map任务处理一个“分片”。 
2) 分片完毕后,多台机器就可以同时进行map工作了。 
   map函数要做的事情,相当于对数据进行“预处理”,输出所要的“关切”。 
   map对每条记录的输出以<key,value> pair的形式输出。 
3) 在进入reduce阶段之前,还要将各个map中相关的数据(key相同的数据)归结到一起,发往一个reducer。这里面就涉及到多个map的输出“混合地”对应多个reducer的情况,这个过程叫做“洗牌”。 
4) 接下来进入reduce阶段。相同的key的map输出会到达同一个reducer。 
   reducer对key相同的多个value进行“reduce操作”,最后一个key的一串value经过reduce函数的作用后,变成了一个value。 


上面粗略的介绍了MapRedcue。来发张图,更有利于理解: 
 

上图来自《Hadoop The Definitive Guide》 

转:http://www.iteye.com/topic/711111

猜你喜欢

转载自blog.csdn.net/wdr2003/article/details/80407866