![](https://csdnimg.cn/release/download_crawler_static/86294880/bg5.jpg)
1774
Journal of Software 软件学报 Vol.29, No.6, June 2018
Map Reduce Map Reduce
一次迭代
二次迭代
Map Reduce Map Reduce
作业1
作业2
作业4
作业3
...
Fig.2 Job division of PageRank in two iterations
图 2 PageRank 两次迭代作业划分
1.4 MapReduce应用与发展
由于 MapReduce 易操作、可扩展及支持容错等特点,目前有越来越多的企业和应用都将 MapReduce 作为
大数据处理平台的核心思想,其中最流行的为 Apache 研发的 HadoopMapReduce 平台.Hadoop
[13]
作为开源的分
布式编程计算框架,其核心由 HDFS
[14]
,MapReduce 和 YARN
[15]
组成,其中,HDFS(hadoop distributed file system)
是适合搭建在廉价集群上可靠的分布式文件存储与传输系统.HDFS 采用 master/slave 架构,将集群中所有服务
器存储空间连接到一起,构成了统一的、可以分布式存储海量非结构化数据的空间,具有成本低廉、可靠性强、
吞吐量高等特点.YARN 是自 Hadoop 2.0 后提供的新型资源管理器.YARN 将 JobTracker 的系统资源管理调度
和单个应用监控跟踪功能分离成两个独立的进程 ResourceManager 和 ApplicationMaster,更好地支持分布式编
程计算框架.
随着以 MapReduce 为编程模型的应用越来越多,关于 MapReduce 模型的研究也逐渐增多,其中,主要研究方
向集中在以下几方面.
• MapReduce 作业数据放置问题:在 MapReduce 中,数据块放置的方式都是采取随机放置,这种放置方式
实现简单,但是可能会因为有关联的数据块放置不均匀,导致 MapReduce 执行效率不高的问题.文献
[16]通过构建历史数据访问图得出最优数据放置策略;文献[17]根据被访问次数越多则被访问概率越
大的原理提出了一种基于文件分组放置的方法;
• 异构环境下提高 MapReduce 性能问题:在大规模异构环境下,不同计算节点的性能差异会影响整个系
统的计算效率.文献[18]提出了自适应的任务调度策略 SAMR(self-adaptive MapReduce),自动寻找执行
较慢的节点并进行备份;文献[19]通过拆分较慢节点中的任务并分配给快节点执行的动态负载均衡策
略 SkewTune 解决异构问题;文献[20]提出了多种优化方法,保证为 Ma
pReduce 任务分得适当的资源;
• MapReduce 处理迭代问题性能不高问题:由于 MapReduce 每个作业中只包含一对 Map-Reduce 任务及
中间数据必须存入磁盘的特性,MapReduce 在计算迭代问题时性能会显著降低.为此,在 MapReduce 基
础上产生了很多针对迭代算法改进的类 MapReduce 框架,其中代表性的有 Twister
[21]
,Haloop
[22]
和
iMapReduce
[23]
等.
2 Spark
2.1 Spark背景
Spark 是一种基于内存的开源计算框架,2009 年诞生于美国加州大学伯克利分校 AMPLab,在 2010 年正式
开源,并于 2013 年成为了 Apache 基金项目,到 2014 年便成为 Apache 基金的顶级项目.自发布以来,Spark 已经
被 Yahoo,eBay 和 Netflix 等多家公司在 8 000 多个节点的集群上处理了 PB 级的数据.
在 Spark 中,核心抽象概念就是弹性分布式数据集 RDD(resilient distributed datasets)
[24]
,该抽象是分布在集
群上的只读型可恢复数据集.用户可以利用 Spark 中的转换(transformation)和动作(action)对其进行操作,也可以
长期保存在内存中不被回收,这样,再次使用这部分内容时,不需要再次创建此 RDD.这也是 Spark 在迭代问题中
的性能表现要高于 MapReduce 的原因.RDD 通过一种血统(lineage)关系来完成容错:如果一个 RDD 丢失,那么