MapReduce并行计算技术发展综述
摘要:经过几年的发展,并行编程模型MapReduce产生了若干个改进框架,它们都是针对传统MapReduce的不足进行的修正或重写.本文阐述和分析了这些研究成果,包括:以HaLoop为代表的迭代计算框架、以Twitter为代表的实时计算框架、以ApacheHama为代表的图计算框架以及以ApacheYARN为代表的框架管理平台.这些专用系统在大数据领域发挥着越来越重要的作用.
MapReduce[1]是Google公司于2004年提出的能并发处理海量数据的并行编程模型,其特点是简单易学、适用广泛,能够降低并行编程难度,让程序员从繁杂的并行编程工作中解脱出来,轻松地编写简单、高效的并行程序.针对上述问题,MapReduce并行编程模型的最大优势在于能够屏蔽底层实现细节,有效降低并行编程难度,提高编程效率.其主要贡献在于: 使用廉价的商用机器组成集群,费用较低,同时又能具有较高的性能; 松耦合和无共享结构使之具有良好的可扩展性; 用户可根据需要自定义Map、Reduce和Partition等函数; 提供了一个运行时支持库,它支持任务的自动并行执行.提供的接口便于用户高效地进行任务调度、负载均衡、容错和一致性管理等; MapReduce适用范围广泛,不仅适用于搜索领域,也适用于满足MapReduce要求的其它领域计算任务
2 MapReduce总体研究状况
最近几年,在处理TB和PB级数据方面,MapReduce
已经成为使用最为广泛的并行编程模型之一.国内外MapReduce相关的研究成果主要有以下几方面:
(1)在编程模型改进方面:MapReduce存在诸多不足.目前,典型研究成果有Barrier-lessMapReduce[6]、MapReduceMerge[7]、Oivos[8]、Kahnprocessnetworks[9]等.但这些模型均仅针对MapReduce某方面的不足,研究片面,并且都没有得到广泛应用,部分模型也不成熟
(2)在模型针对不同平台的实现方面:典型研究成果包括:Hadoop[10]、Phoenix[11,12]、Mars13]、CellMapRe-duce[14]、Misco[15]和Ussop[16]部分平台(例如:GPUs和Cell/B.E.)由于底层硬件比较复杂,造成编程难度较大,增加了用户编程的负担.
\\(3)在运行时支持库(包括:任务调度、负载均衡和容错)方面:常用的任务调度策略是任务窃取,但该策略有时会加大通信开销.典型的研究成果包括:延迟调度策略[17]、LATE调度策略[18]和基于性能驱动的任务调度策略[19]等.在容错方面的典型研究成果是reduce对象[20].目前,运行时支持库中针对一致性管理和资源分配等方面的研究相对较少.
(4)在性能分析与优化方面: 目前, 文献[ 21]主要研究在全虚拟环境下MapReduce 性能分析, 文献[ 22]则提出了名为MRBench 的性能分析评价指标. 性能优化典型成果包括: 几何规划[ 23]、 动态优先级管理[ 24]和硬件加速器[ 25]等. 着眼于性能, 结合运行时支持库, 将是MapReduce研究的热点之一.
(5)在安全性和节能方面: 安全性方面典型研究成果是 Sec ureMR模型[ 2 6]. 文献[ 27]和文献[ 28] 则在节能方面做了相应的研究. 目前国内外在安全性和节能方面的研究成果相对较少, 但是这方面研究的重要性已经得到了越来越多的重视. 如果一个模型没有很高的安全性, 同时也没有很好地考虑功耗问题, 那对其大范围推广将产生致命的影响.
(6)在实际应用方面: MapReduce 应用范围广泛,Google 等诸多公司都在使用
MapReduce 来加速或者简化各自公司的业务[ 29]. MapReduce 还广泛应用于云计算[ 3 0]和图像处理[ 31]等领域. 随着科技的进步, MapRe -duc e 将会得到越来越广泛的应用
.国内学者MapReduce 相关研究成果主要集中在实际应用方面. 例如, 把MapReduce 应用于模式发现[ 32]和数据挖掘[ 3 3]等领域. 部分研究成果涉及模型针对不同平台的实现、 任务调度、 容错和性能评估优化. 例如, 文献[ 34]提出了名为 FPMR 的基于FPGA 平台的 MapRe -duc e 实现, 文献[ 35]提出了基于已知数据分布的任务调度策略, 文献[ 36]提出了名为 SAMR的异构环境下自适应任务调度策略, 文献[ 37]提出了基于目录的双阶段错误恢复机制, 文献[ 38]提出了名为The HiBench Bench -mark Sui te 的性能评估指标, 文献[ 39]提出利用分布式的研究起步稍晚, 绝大部分研究集中在应用方面. 对MapReduce 关键技术也进行了研究. 但是相对于国外,国内在这些方面的研究成果较少
.3 MapReduce模型及其改进
Google 公司最早提出了MapReduce 并行编程模型,当用户程序调用MapReduce运行时支持库时, 其执行过程如下(如图1 所示) :
( 1)首先, 用户程序把输入数据分割成 M 份, 每份为16MB到64MB大小的数据块(可通过参数来设定) .然后, 开始在集群上进行程序的拷贝. 这些程序拷贝中有一份是Master,其余都是向Maste r 请求任务的Worker;
( 2)一旦分配到Map任务,Worke r 便从相应的输入数据中分析出 ke y/ value 对, 并把每个 key/ value 对作为用户定义的 Map函数的输入. Map函数产生的中间值key/ value 对被存储在内存中;
( 3)存储在内存里的中间值 key/ value 对会被定期写入本地磁盘中, 用户定义的Parti tion函数将其划分为多个部分,Master 负责把这些中间值key/ value对在本地磁盘上的存储位置传送给执行Reduce 任务的Worker;
( 4)通过远程过程调用, 执行Reduce 任务的Worker从执行Map任务的Worker 的本地磁盘读取中间值 ke y/value对;
( 5)当一个执行Reduce 任务的Worker 从远程读取到所有所需的中间值 key/ value 对之后, 通过排序将具有相同key的中间值key/ value对聚合在一起, 形成ke y/value s 对, 作为Reduce 函数的输入;
( 6)每个Reduc e 函数的输出分别放到相应的输出文件中. 当所有的Map和Reduce 任务都执行完毕,Mas -ter 唤醒用户程序. 此时, 用户程序中的MapReduce 调用返回用户代码.
MapReduce 可以处理TB和PB量级的数据, 能很方便地在许多机器上实现数据密集型计算的并行化. 算法1 给出基于MapReduce 的单词统计程序伪代码, 程序功能是统计文本中所有单词出现的次数.Map函数产生每个词和这个词的出现次数(在本例中就是 1) . Reduce函数把产生的每一个特定词的计数加在一起.上述要求MapReduce 缺乏支持处理多个相关异构数据集的能力. 为此, 文献[ 7] 提出了MapReduceMerge 并行编程模型, 对多个异构数据集分别执行Map和Reduce 操作,之后在Merge 阶段把Reduce 阶段已分割和分类融合的数据进行有效地合并.
MapReduceMerge尽管能够处理多个相关异构数据集, 但是并不支持自动执行多次MapReduceMerge 过程.当用户手动执行多次 MapReduce 或者 MapReduceMe rge
过程时, 用户需要解决任务调度、 同步性和容错等问题, 编程负担过重. 为此, 文献[ 8] 提出了 Oivos 并行编程模型, Oivos 利用抽象层来实现自动管理执行多次MapReduce 或者MapReduceMe rge过程. Oivos需要用户指定处理多个相关异构数据集所需 MapReduce 或者MapReduceMe rge过程的个数, 并通过检测逻辑时间戳来自动发现哪些任务需要重新执行.
MapReduce 并行编程模型死板, 且不能很好地适应小规模集群. 为此, 基于消息传递和无共享模型, 文献[ 9]提出了名为KPNs ( Kahn process ne tworks)的并行编程模型. KPNs可自动执行迭代计算, 且编程灵活(例如:KPNs的输入不必抽象成 key/ value 对的形式) . 同时, 把串行算法改写成 KPNs 形式仅需在恰当的地方插入通信状态. 但是该模型仍需大量的实验来验证其性能与可扩展性.
表 1显示了MapReduce 并行编程模型及其改进研究对比. 通过比较不难看出, 以 Google 公司提出的MapReduce为基础, 针对其不足, 很多研究学者进行了相关研究, 并取得了一定的研究成果. 但是仍存在着一些不足: 首先, 这些模型均仅针对MapReduce 某个方面的不足, 研究较为片面, 并且都没有得到广泛的应用.其次, 部分模型并不成熟, 仍需要进一步的实验来验证其性能与可扩展性.最后, 没有研究结合不同模型的特点, 得出一个全面优化的并行编程模型
3. 2 针对不同平台实现方面的研究
受到 Google 公司提出的MapReduce 并行编程模型启发, 目前被广泛使用的代表是Hadoop. 它是一个开源的可运行于大型分布式集群上的并行编程框架, 提供了一个支持MapReduce并行编程模型的部件.Hadoop具有良好的存储和计算可扩展性; 具有分布式处理的可靠性和高效性; 具有良好的经济性(运行在普通 PC 机上) .
Hadoop也存在一些不足: 小块数据处理由于系统开销等原因处理速度并不一定比串行程序快; 如果计算产生的中间结果文件非常巨大, Reduce 过程需要通过远程过程调用来获取这些中间结果文件, 会加大网络传输的开销; Hadoop 作为一个比较新的项目,性能和稳定性的提升还需一定时间.
随着科技的进步与硬件平台的发展, 许多研究学者在不同的实验平台上实现了MapReduce, 并取得了一定的研究成果. 其主要的研究成果包括:
(1)在共享内存平台上: 斯坦福大学计算机系统实验室在共享内存系统上实现了 MapReduce, 被称为Phoenix. Phoenix 采用线程来实现Map和Reduce任务, 同时利用共享内存缓冲区实现通信, 从而避免了因数据拷贝产生的开销. 但Phoenix 也存在不能自动执行迭代计算、 没有高效的错误发现机制等不足.(2)在GPUs 平台上: Mars 是基于GPUs( 图形处理器)的MapReduce 实现.Ma rs也具有Map与Reduce 这两个步骤. 在每个步骤开始之前, Mars对线程配置进行初始化 (包括:线程组的个数、 每个线程组中线程的个数等) . 由于GPU线程不支持运行时动态调度, 所以给每个GPU 线程分配的任务是固定的. 若输入数据划分不均匀, 必将导致Map或者Reduce 阶段的负载不均衡, 使得整个系统性能急剧降低. 同时由于 GPU 不支持运行时在设备内存中分配空间, 需要预先在设备内存中分配好输入数据和输出数据的存放空间. 但是在 Map 和Reduce阶段输出数据大小是未知的, 并且当多个 GPU线程同时向共享输出区域中写数据时, 易造成写冲突.另外, 由于Mars的编程接口是为图形处理而专门设计的, 因此用户编程较为复杂.
(3) 在 Cell / B. E. 平台上: Cell MapReduce 是基于Cell / B. E. (Cell宽带引擎)的MapReduce 实现. 将MapRe -duc e 移植到Cell / B. E. 架构主要存在三个问题: 必须实现全局内存与 SP E 内存之间的内存管理和交换; 由于主要负责Map和Reduce 任务执行的SPE 内存是由软件管理的, 因此需要通过内存交换来解决计算重叠问题; 在Map
和 Reduce 阶段之间存在一个逻辑聚合阶段, 该阶段需要在各 SPE 之间高效执行. 为此, CellMapReduce提出: 通过块 DMA 传输来预先分配 Map和Reduce 任务的输出区域, 以达到解决内存管理的目的; 提出通过双缓冲区和流数据的内存交换来实现计算并行化; 提出通过双阶段 Parti tion 和Sort处理来实现逻辑聚合. 综上, 该模型为用户提供了一个简单的机器抽象, 隐藏了并行实现与硬件的细节. 而且还提供了一套API和运行时系统来自动管理同步性、 调度、 分块和内存交换等工作. 然而, 虽然 Cell/B. E. 处理单元之间有很高的带宽, 但是 Cel l/ B. E. 没有为协同处理单元提供一致性的存储器, 同时程序员必须仔细管理进出
于各个SPE的数据移动, 编程难度太大.
( 4)在FPGA 平台上: 近年来, FPGA(现场可编程门阵列)开始应用于高性能计算应用中[ 40]. 相对于其它并行计算平台, FPGA 具有可重构性、 高灵活性和严格遵守摩尔定律的优势. 但是, 基于 FPGA 的计算亦受到硬件结构的设计开发和寄存器级数据传输的限制, 导致编程效率较低. 为此, 文献[ 34]提出了名为 FPMR的基于FPGA的MapReduce实现. 首先, 利用FPGA的可重构性, 在片上实现多个Map与Reduce任务, 以实现较好的性能. 其次, 通过片上动态调度策略来实现较好的资源利用率和负载均衡, 以达到把编程人员从具体任务控制和通信操作中解放出来的目的. 最后, 通过高效的数据获取策略来实现最大化数据的重利用和解决带宽瓶颈. 但是FPMR 不支持利用页式硬件进行动态内存管理, 同时也需要更多的实验来验证FPMR的效率和生产力.
( 5)在分布式移动平台上: 功能强大的移动设备的不断普及, 便于提供一个功能强大的分布式移动计算环境. 但是, 在这样的环境中, 软件开发和应用部署都面临着易出错、 同步性困难、 资源分配复杂、 缺少编程模型支持等问题. 同时, 若把 MapReduce 应用于移动网络将具有很差的计算连通性. 为此, 文献[ 15] 提出了名为Misco 的基于分布式移
动平台的 MapReduce 实现.Misc o 由一个Ma ste r Server 和一系列Worker Nodes 组成.其中,Master 和Worker 之间采用基于轮询[ 41]的通信机制, 使用HTTP的方式来传输数据.Master Server 时刻跟踪用户应用, 负责其任务调度与分配, 保存与应用相关的输入数据、 中间值和最终结果. Worke r Nodes 则负责执行Map与Reduce 任务. 但是由于轮询的时间间隔不好确定, 若时间间隔设置不当, 会显著降低程序的执行性能.
(6) 在公共资源网格平台上: 文献[ 16] 提出名为Ussop 的基于公共资源网格环境的MapReduce 实现. 针对网格资源的异变性和广域网中进行数据交换开销大的特点,Ussop 提出了两个任务调度算法, 一个能根据网格节点的计算能力, 自适应Map 输入的粒度. 另一个能最小化在广域网传输中间数据的开销. 但是Ussop 缺乏高效的容错机制, 当一个节点因处于过载状态而无法给Map任务分配资源时, 只能在其它节点重新执行该任务, 无法做到资源的重新分配或者任务迁移.表 2显示了MapReduce 针对不同平台的实现研究对比. 由表2可知, 除了Hadoop 之外, 其它的实现都没有得到广泛的应用. 同时一些实现(例如: Mars 和 Cel lMapReduce)由于底层硬件比较复杂或者底层硬件架构的限制, 造成用户编程难度较大, 增加了用户负担, 不利于其大范围推广.
4 运行时支持库及其改进 MapReduce 运行时支持库是MapReduce 实现的基础,它能有效进行任务调度、 负载均衡、 容错和一致性管理等, 能够隐藏底层细节, 降低用户编程的难度.4 1 任务调度及负载均衡方面的研究MapReduce并行编程模型采用基于数据存储位置的任务窃取调度策略. 如果某个Worke r 的本地任务列表非空, 则首先执行该列表的第一个任务; 如果某个Worker 的本地任务列表为空, 则从与之最近的 Worker窃取任务来执行. 这样能够减少通信开销, 提高系统性能. 但是,该策略也存在如下几点不足:
(1)如果数据分布不均匀, 会有更多的Map 任务不能在本地执行. 此时, 该策略反而
会增大通信开销, 导致性能下降. 为此, 文献[ 35]提出了基于已知数据分布的MapReduce 任务调度策略. 该调度策略基于节点和任务的优先级, 充分考虑系统中数据的分布, 将任务调度给合适的节点. 这样就能实现以较高的概率将 Map 任务分配给本地有数据的节点, 从而减少通信开销, 提高系统性能.
(2)MapReduce 任务调度策略存在调度的公平性和数据存储位置(即为具有输入数据的节点分配任务)之间的冲突. 即依照严格的任务队列顺序, 一个没有本地数据的任务会被强制调度, 这会增加通信开销. 为此,文献[ 17]提出了延迟调度算法. 当节点请求任务时, 如果任务列表中的第一个任务不能在本地启动, 则系统自动跳过该任务, 查询下一个任务, 直至找到一个能在本地启动的任务. 当然, 如果一个节点请求任务时跳过的任务过多, 系统将允许其启动数据不在本地的任务.
( 3)有时候, 多个MapReduce 任务需要共享相同的物理资源. 这就有必要预测和管理每个任务的性能, 据此为每个任务分配合适的资源. 为此, 文献[ 19]提出了基于性能驱动的任务调度策略. 该策略能动态预测当前MapReduce任务的性能, 并且能够为该任务调整资源分配, 使之既能达到应用的性能目标, 又不会占用过多的资源.
( 4) MapReduce 为节约响应时间采用预测执行机制, 即若一个节点可获得但是性能很差, 那么MapRe -duce 会把运行在该节点上任务作为备份任务在其它节点上运行. 但是这种机制在异构环境中会导致程序性能的降低, 为此, 文献[ 18]提出了名为LATE( Longest Ap -proxima te Time to End)的任务调度策略. LATE 通过计算所有任务的剩余时间来找到执行最慢的任务作为备份任务, 这样就能有效缩短MapReduce在异构环境中的响应时间. 但是LATE 并不能正确计算任务的剩余时间,因而不能找到真正执行最慢的任务, 同时也不能适应异构环境的动态变化. 为此, 文献[ 36] 提出了名为SAMR( Sel - f Adaptive MapReduce) 的任务调度策略, 通过记录在每个节点上的任务执行历史信息,
SAMR能动态找到真正执行最慢的任务作为备份任务. 但是SAMR在执行备份任务时, 并没有考虑数据的存储位置, 同时SAMR仍需在不同的平台下进行评估测试
综上, 针对MapReduce 并行编程模型采用的任务调度策略的特点, 很多学者进行了相关研究, 并取得了一定的研究成果. 但是这些研究成果没有充分考虑数据存储位置及其动态变化, 不能根据数据划分的粒度, 自动选择合适的任务调度策略.
4 2 容错方面的研究
MapReduce并行编程模型被设计用于使用数目众多的机器处理海量数据, 因此MapReduce 运行时支持库必须能够很好地处理发生的机器故障.
在MapReduce 并行编程模型中,Worke r 节点采用基于响应的错误恢复机制.Master节点周期性地 ping 每个Worker 节点. 如果在一个时间段内Worke r 节点没有返回信息,Master 节点就会标注该Worke r 节点失效. 由该失效 Worker 完成的所有任务将被重新设置成初始空闲状态, 并被分配给其它Worke r 执行.
Master节点采用基于检查点的错误恢复机制. Mas -ter节点周期性地写入检查点. 如果Master 任务失效了,则可从最后一个检查点来启动另一个Master 进程
检查点和日志[ 4 2]是两种被广泛使用的错误回滚恢复机制. 在MapReduce 并行编程模型中, Worker 节点采用基于响应的错误恢复机制, Master 节点采用基于检查点的错误恢复机制.但是, 基于响应的错误恢复机制不能实现低开销和高效性, 基于检查点的错误恢复机制在创建检查点时开销较大. 同时基于日志的错误恢复机制虽然较简单(错误恢复时所需的所有信息都在日志中) , 但是在跨网络传输较大的日志文件时, 会造成较大的网络带
宽浪费, 并可能延迟应用数据的传输. 为此,文献[ 37]提出基于日志的双阶段错误恢复机制, 把日志分为 basic和 e xtra 两部分, 同时把恢复机制分成两阶段, 以减少状态信息的传输, 该机制在节省网络带宽的同时能够优化全局性能.
在MapReduce并行编程模型中, 如果Worke r 节点发生错误, 需要重启该节点上运行的所有 Map 或Reduce任务, 不能实现低开销和高效性. 为此, 文献[ 20]提出了基于选择性的API 来实现数据密集型应用的并行化. 该API提供了一个由用户声明的reduce 对象, 该对象是任何节点的计算状态集合. 当某个节点出错时, 该节点未处理的数据可被其它节点处理. 从出错节点上拷贝过来的 reduce 对象与其它节点上的 reduce 对象一起来产生最终的正确结果. 这样就能实现低开销和高效的容错机制.
综上, 针对MapReduce 并行编程模型, Google 公司提出的容错策略不够完善, Master 节点容错开销过大,Worker 节点容错很容易产生重复计算, 造成计算资源的浪费. 对此许多研究学者进行了相关研究, 并取得了一定的研究成果. 但这些研究主要是针对Worke r 节点
的容错, 针对Master节点容错的研究较少.
5 总结及未来的发展趋势
目前, 国内外众多研究人员已对MapReduce 并行编程模型所涉及的关键技术( 包括: 模型改进、 模型针对不同平台的实现、 任务调度、 负载均衡和容错) 进行了卓有成效的研究. 预计在今后的一段时期内, 与MapRe -duce 并行编程模型相关的研究可能会朝着以下几方面进行:
( 1)逐步形成完善的 MapReduce 并行编程模型规范. 它统一定义MapReduce并行编程模型的各个组成部分(例如:Map、 Parti tion、 Sort、 Reduc e 和Me rge等) , 将现存的多种定义一致起来, 形成能够长期有效的统一定义规范. 它支持并行计算和分布式应用, 具有良好的自适应能力与性能预测能力, 能够满足较高的性能要求.( 2)由于MapReduce并行编程模型主要用于大规模数据集(TB甚至PB级)的并行处理. 因此, 性能问题将成为研究的重点之一.可着眼于性能, 研究MapRe duc e 并行编程模型, 在Ma pReduce 并行编程模型的实现中采取多种提高性能的手段(例如: 减少数据拷贝, 改进节点间数据传输方法, 改进运行时支持库的任务调度机制, 改进内存管理, 采用高效的同步机制和性能预测等) .(3) 随着云计算的兴起与进一步发展, MapReduce并行编程模型的大规模底层基础设施建设(例如: Ama -zon 的EC2与S3[ 43]等) 将成为研究的热点, 这也是基于MapReduce 并行编程模型的各种应用(例如: 云计算等)的实现根本.( 4)针对不同的实验平台实现MapReduce并行编程模型. 已有学者将MapReduce并行编程模型从最初的普通多核分布式系统, 移植到共享内存和Cell / B. E. 架构等环境中. 将来MapReduce并行编程模型会被移植到更多的实验平台上(例如: 物联网[ 44- 45]等) . 同时已有平台上的实现会进一步优化.( 5)MapReduce并行编程模型的应用领域将进一步扩大. 目前MapReduce 已被各大互联网公司所采用, 并且在云计算和图像处理等领域得到了广泛的应用. 相信将来更多的公司会采用MapReduce并行编程模型, 同时针对不同的应用领域, 开发出更多的专用模型.综上所述,MapReduce 并行编程模型的研究是一个充满前途和挑战的领域, 它改变着大规模数据集的并行计算方式, 必将在并行计算领域发挥越来越重要的作用
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务