论文部分内容阅读
随着互联网的发展,分布式应用的需求不断增长。从MapReduce产生开始,各种数据并行的分布式计算系统层出不穷,如Microsoft的Dryad,Google的Pregel,UC Berkeley的Spark。针对不同的分布式应用需要构建不同的计算框架以支持其运算。现在的分布式应用根据特征可以划分成许多种类,如迭代式、分布式流处理、数据仓库应用、图计算等。其中迭代式计算作为重要的大数据分析应用,在分布式应用当中广泛出现,也是其他许多应用的基础。 Hadoop/MapReduce作为一个广泛使用分布式计算系统,能够有效地处理许多大数据批处理作业。MapReduce在作业的输入与输出上需要与分布式文件系统(Distributed File System)的交互。在MapReduce上实现迭代计算时,计算会被分解成多个作业并按作业依存关系顺序提交运行,这使得程序与DFS有多次交互。与文件系统的多次交互将影响整个程序的运行时间。在迭代程序当中对这些交互相关的数据进行缓存会减少与DFS的交互时间,从而提升程序总体的性能。在集群中,多数结点有大量内存,这些内存在多数情况下处于空闲状态,充分利用现有的内存会减少读写时间。基于上述两项观察,本文提出了一种使用内存缓存的迭代式应用编程框架MemLoop。 MemLoop是一个在HaLoop上进行扩展的分布式编程框架。HaLoop基于一个这样的假设,多数迭代程序有一些数据是在迭代体之间多次使用的(称作迭代间驻留数据),导致了不必要的性能损失,因此在本地磁盘上缓存这些数据以减少执行时间与网络带宽消耗。MemLoop基于HaLoop并主要进行了以下的扩展:1.作业提交API,在原有的HaLoop的提交API上,加入了关于依存关系的描述,将需要缓存的数据分成迭代间可驻留的数据与迭代内依存的数据。2.调度算法。除了考虑关于迭代间可驻留数据的调度之外,还考虑针对迭代内依存数据的调度。3.缓存管理模块。在每个TaskTracker管理一个文件在结点上的缓存的生存周期。通过对三个方面的扩展,MemLoop充分利用内存以减少存取的时间,提升性能。 将MemLoop框架与已有相关框架进行了比较,在一个小型的集群上运行了常见的迭代式程序。实验结果表明通过对于迭代程序的依存关系的描述与内存的缓存,MemLoop能够有效地提升迭代程序的性能。