论文笔记:《Google MapReduce》

来源:互联网 发布:ps cc mac怎么安装啊 编辑:程序博客网 时间:2024/06/03 13:37
《Google MapReduce》用户首先创建一个Map函数处理一个基于keyalue pair的数据集合,输出中间的基于keyalue pair的数据集合;然后再创建一个Reduce函数用来合并所有的具有相同中间key值的中间value值。MapReduce架构的程序能够在大量的普通配置的计算机上实现并行化处理。这个系统在运行时只关心:如何分割输入数据,在大量计算机组成的集群上的调度,集群中计算机的错误处理,管理集群中计算机之间必要的通信。一个典型的MapReduce计算往往由几千台机器组成、处理以TB计算的数据。

mapreduce实现的流程如下图所示,

(1)用户程序首先调用的MapReduce库将输入文件分成M个数据片度,每个数据片段的大小一般从 16MB到64MB,然后用户程序在机群中创建大量的程序副本。
(2)这些程序副本中的有一个特殊的程序–master。副本中其它的程序都是worker程序,由master分配任务。有M个Map任务和R个Reduce任务将被分配,master将一个Map任务或Reduce任务分配给一个空闲的worker。
(3)被分配了map任务的worker程序读取相关的输入数据片段,从输入的数据片段中解析出key/value pair,然后把key/value pair传递给用户自定义的Map函数,由Map函数生成并输出的中间key/value pair,并缓存在内存中。
(4)缓存中的key/value pair通过分区函数分成R个区域,之后周期性的写入到本地磁盘上。缓存的key/value pair在本地磁盘上的存储位置将被回传给master,由master负责把这些存储位置再传送给Reduce worker。
(5)当Reduce worker程序接收到master程序发来的数据存储位置信息后,使用RPC从Map worker所在主机的磁盘上读取这些缓存数据。当Reduce worker读取了所有的中间数据后,通过对key进行排序后使得具有相同key值的数据聚合在一起。由于许多不同的key值会映射到相同的Reduce任务上,因此必须进行排序。如果中间数据太大无法在内存中完成排序,那么就要在外部进行排序。
(6)Reduce worker程序遍历排序后的中间数据,对于每一个唯一的中间key值,Reduce worker程序将这个key值和它相关的中间value值的集合传递给用户自定义的Reduce函数。Reduce函数的输出被追加到所属分区的输出文件。

MapReduce的容错机制:针对worker故障,master周期性的ping每个worker,当worker A失效时,则调度worker B执行A的任务;针对master故障,让master周期性将checkpoint写入磁盘,master失效后,从最后一个checkpoint启动另一个master进程。

MapReduce的一些优化设计:(1)输入数据本地化优化策略:考虑到网络带宽相对匮乏,尽量把输入数据存储在集群中机器的本地磁盘,将map任务调度在数据包含在本地磁盘的机器上执行,从而减少网络带宽的消耗;(2)我们把Map拆分成了M个片段、把Reduce拆分成R个片段执行。理想情况下,M和R应当比集群中worker的机器数量要多得多,让每个worker处理大量任务,有利于实现负载均衡;(3)影响一个MapReduce的总执行时间最通常的因素是“落伍者”,应对措施:当一个MapReduce操作接近完成的时候,master调度备用(backup)任务进程来执行剩下的、处于处理中状态(in-progress)的任务。无论是最初的执行进程、还是备用(backup)任务进程完成了任务,我们都把这个任务标记成为已经完成。

0 0
原创粉丝点击