现在的位置: 首页 > 综合 > 正文

mapreduce执行过程

2014年02月27日 ⁄ 综合 ⁄ 共 1153字 ⁄ 字号 评论关闭

Hadoop的一般性MapReduce计算有几个步骤,哪个步骤最花费时间?

(1)input      分片,在集群中拷贝文件到相应节点

(2)map tasks    
map worker调用map函数,并将map函数结果缓存到内存中,定期写入到磁盘

(3)reduce tasks     通过master的位置通知,得到map worker写入磁盘的位置,去读取数据并进行reduce工作,执行reduce函数

(4)output      每个reduce节点会生成一个由用户指定名字的输出文件

MapReduce执行的动作
1.在用户程序里的MapReduce库首先分割输入文件成M个片,每个片的大小一般从16到64MB。然后在机群中开始大量地拷贝程序
2.这些程序拷贝中的一个是master,其他的都是由 master分配任务的worker。有M个map任务和R个reduce任务将被分配。master分配一个map任务或reduce任务给一个空闲的worker。
3.一个被分配了map任务的worker读取相关输入split的内容。它从输入数据中分析出key/value对,然后把key/value对传递给用户自定义的map函数。由map函数产生的中间key/value对被缓存在内存中。
4.缓存在内存中的key/value对被周期性地写入到本地磁盘上,通过分割函数把它们写入R个区域。在本地磁盘上的缓存对的位置被传送给master,master负责把这些位置传送给reduce  worker。
5.当一个reduce worker得到master的位置通知的时候,它使用远程过程调用来从map worker的磁盘上读取缓存的数据。当reduce worker读取了所有的中间数据后、它通过排序使具有相同key的内容聚合在一起。因为许多不同的key映射到相同的reduce任务,所以排序是必须的。如果中间数据比内存还大,那么还需要一个外部排序。
6.reduce worker迭代排过序的中间数据,对于遇到的每一个唯一的中间key,它把key和相关的中间value集传递给用户自定义的reduce函数。reduce函数的输出被添加到这个reduce分割的最终输出文件中。
7.当所有的map和reduce任务执行完成了,master唤醒用户程序。在这个时候,在用户程序里的MapReduce调用返回到用户代码。
在成功完成之后,mapreduce执行的输出存放在R个输出文件中(每一个reduce任务产生一个由用户指定名字的文件)。一般,用户不需要合并这R个输出文件成一个文件——他们经常把这些文件当作一个输入传递给其他的MapReduce调用,或者在可以处理多个分割文件的分布式应用中使用他们。
下图中描述了mapreduce的过程:
 

抱歉!评论已关闭.