您的位置:首页 > 其它

Mapreduce计算框架涉及的技术(2)-工作机制详解

2014-09-03 14:15 405 查看


图1 MapReduce 运行机制

一 MapReduce过程中需要注意的几个问题

假设运行某程序时,调度系统根据输入参数产生,M个mapper 与N个reducer。

1    每个 mapper在逻辑上将输出分成N份(每份对应一个唯一确定的reducer),各reducer通过tasktracker远程拷贝属于自己的输入数据(M个输入。
2     调度器根据输入数据集的大小和map slot 的个数及分布,进行任务的划分(为任务分配数据块); 大多数情况下,输入数据集与其对应的计算任务处于同一节点,以减少数据在网络上的传输,节点内进程通信比节点间进程通信代价要小很多。
3    map阶段spill和merge,mapper受内存大小限制,将会触发spill操作,mapper会将输出数据在进行排序后写入磁盘,保存在单独的临时文件。  由于mapper可能会产生多个临时文件,多个临时文件会被(merge)合并成一个文件,这个最终的文件逻辑上分为N份,这些数据有这样的特点:块内有序,块间无序。
4     reduce阶段的merge,每个reducer通过远程拷贝的方式获取M个输入数据块,这些数据的特点也是块内有序,块间无序,需要进行merge操作变得有序。
5   计算节点本地存储和HDFS存储,Mapper的输入数据和reducer的输出数据存在HDFS中,mapper的输出和reducer的输入保存在各自节点的本地磁盘,物理上这些数据可能同时存在于同一个物理节点,但是不属于同一个逻辑存储系统。
6     数据传输方式(http and rpc),reducer通过http方式从tasktracker获取mapper的输出。
7    性能计数器 performance counter,map阶段输入输出总数据量,临时数据的读写数据总量,spill和merge的次数等这些信息都是程序性能优化的基本依据。
[/code]

二 块内有序 and 块间无序

在整个MapReduce计算过程中,不管是在map阶段还是reduce阶段,对临时数据的merge操作时一个普遍的场景,这些场景对应的输入数据均有以下特点:(逻辑和物理)块内数据有序,但是块间数据无序。[code]    merge操作是MapReduce框架下最基础的操作,并且与具体的应用程序无关,其具体的场景主要有如下几处:
1 图中最小的椭圆所标记的区域包含一份即将由mapper写入磁盘的数据,这份数据逻辑上分为三块,划分依据是三个不同reducer负责的key的范围,这份数据最终以一个单独的临时文件的方式保存在磁盘中。由于每个mapper可能会产生多个临时文件,那么这些临时文件之间的关系就是 块内有序,块间无序,因此归并操作(merge)将这些不同文件合并成一个有序的文件。[/code]
2 图中最右边的椭圆表示,reducer从不同的mapper拷贝输入自己的输入数据,这些数据在各自的mapper范围内有序,但是来自不同mapper的数据 之间无序,因此在进行reduce操作之前,必须将全部的输入数据进行再次归并排序。


三 小结

如果说此图中描述的流程是MapReduce编程模型的骨骼,那么程序运行过程中涉及的performance counter 就是MapReduce编程模型的经脉。要想深入理解其工作机制,我们应该从多个视角学习mapreduce。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: