发布日期:2013-05-02 10:14 来源:雷万云 标签: 并行 编程 模型
 

为了使用户能更轻松地享受云计算带来的服务,让用户能利用编程模型编写简单的程序来实现特定的目的,云计算上的编程模型必须十分简单,必须保证后台复杂的并行执行与任务调度向用户和编程人员透明。

MapReduce是Google开发的Java、Python、C++编程模型,它是一种简化的分布式编程模型和高效的任务调度模型,用于大规模数据集(大于1TB)的并行运算。严格的编程模型使云计算环境下的编程十分简单。MapReduce模式的思想是将要执行的问题分解成Map(映射)和Reduce(化简)的方式,先通过Map程序将数据切割成不相关的区块,分配(调度)给大量计算机处理,达到分布式运算的效果,再通过Reduce程序将结果汇总输出。

云计算大部分采用MapReduce的编程模式。现在大部分IT厂商提出的"云"计划中采用的编程模型,都是基于MapReduce的思想开发的编程工具。MapReduce不仅仅是一种编程模型,同时也是一种高效的任务调度模型。MapReduce这种编程模型不仅适用于云计算,在多核和多处理器、cell processor以及异构机群上同样有良好的性能。该编程模式仅适用于编写任务内部松耦合、能够高度并行化的程序。如何改进该编程模式,使程序员能够轻松地编写紧耦合的程序,运行时能高效地调度和执行任务,是MapReduce编程模型未来的发展方向。MapReduce是一种处理和产生大规模数据集的编程模型,程序员在Map函数中指定对各分块数据的处理过程,在Reduce函数中指定如何对分块数据处理的中间结果进行归约。用户只需要指定Map和Reduce函数来编写分布式的并行程序。当在集群上运行MapReduce程序时,程序员不需要关心如何将输入的数据分块、分配和调度,同时系统还将处理集群内节点失败以及节点间通信的管理等。图3-10给出了一个MapReduce程序的具体执行过程。

图3-10  MapReduce程序的具体执行过程

从图3-10可以看出,执行一个MapReduce程序需要5个步骤:输入文件、将文件分配给多个worker并行地执行、写中间文件(本地写)、多个Reduce workers同时运行、输出最终结果。本地写中间文件在减少了对网络带宽的压力的同时减少了写中间文件的时间耗费。执行Reduce时,根据从Master获得的中间文件位置信息,Reduce使用远程过程调用,从中间文件所在节点读取所需的数据。MapReduce模型具有很强的容错性,当worker节点出现错误时,只需要将该worker节点屏蔽在系统外等待修复,并将该worker上执行的程序迁移到其他worker上重新执行,同时将该迁移信息通过Master发送给需要该节点处理结果的节点。Map Reduce使用检查点的方式来处理Master出错失败的问题,当Master出现错误时,可以根据最近的一个检查点重新选择一个节点作为Master并由此检查点位置继续运行。

MapReduce仅为编程模式的一种,微软提出的DryadLINQ 是另外一种并行编程模式。但它局限于NET的UNQ系统,同时并不开源,限制了它的发展前景。

MapReduce作为一种较为流行的云计算编程模型,在云计算系统中应用广泛。但是基于它的开发工具Hadoop并不完善。特别是其调度算法过于简单,判断需要进行推测执行的任务的算法造成过多任务需要推测执行,降低了整个系统的性能。改进MapReduce的开发工具,包括任务调度器、底层数据存储系统、输入数据切分、监控"云"系统等方面是将来一段时间的主要发展方向。另外,将MapReduce的思想运用在云计算以外的其他方面也是一个流行的研究方向。

 

相关评论

专题信息
    随着云计算技术的应用越来越广泛,云计算的可信性和安全性问题凸显。本书叙述了采用可信云安全技术解决云计算可信和安全问题的方法。可信云安全技术是在云计算环境中,针对云端互动的人进行可信计算和安全计算的技术。