MapReduce浅析

来源:互联网 发布:好看的运动鞋 知乎 编辑:程序博客网 时间:2024/06/08 11:22
MapReduce是一种计算模型。

Map函数的功能是处理一个键值对儿来产生一组键值对儿,reduce函数的功能是将同一个键的所有值进行合并。很多现实的网络任务都可以被表示成为这个模型。使用这种模型撰写的程序可以自动在集群上运行。由于运行时系统处理了如何分割数据、调度运行、处理失效以及机器间交互,使得不具有任何并行编程的程序员也很容易使用分布式系统。

MapReduce的具体流程为(如下图所示):

1 用户程序调用MapReduce库来将输入文件分成M片(M个split)。通常每片16MB到64MB,然后在机器集群上启动运行多份处理程序。
2 在这些机器集群中,有一个是master负责分配任务,其他的都是worker执行任务。其中,任务包含M个map任务和R个reduce任务。每次Master会挑选一个空闲的worker来分配map任务或者reduce任务。
3 被分配了map任务的worker则读取对应的split文件分片,然后解析和统计其中的键值对,并传给用户定义的MAP函数生成所谓的“中间键值对”。
4 这些“中间键值对”会周期性地被从内存中写入本地磁盘,并且会被分割partition成R个分区存储(如通过hash(key) mod R)的方式)。最后会把本地存储的地址告知master以便分配给R个reducer worker.
5 被告知存储地址后,reducer worker通过远程过程调用读取map worker磁盘中的对应的中间数据。当读完后,首先要做一个排序,目的是让具有相同键的对被分组到一起。当然,如果中间数据很多,则有可能需要外部排序。
6 对于每个单独的中间键值,reduce worker将这个键与对应的值的集合传递给用户定义的Reduce函数,来为这个reduce partition生成最终输出文件。
7 当所有map任务和reduce任务全部执行完成后,master唤醒用户程序,即从对MapReduce的调用中返回。


原创粉丝点击