论文部分内容阅读
MapReduce是由Google公司提出的一种并行编程模型,由于模型本身非常简单而又具有丰富的表达能力,很快变成为Google内部系统架构的基本计算框架。Hadoop是MapReduce的开源实现,由于Yahoo!等大数据公司的投入,Hadoop系统得到迅速的发展和普及。MapReduce编程模型的简洁性和Hadoop开源实现的出现,使得由普通机器组成的集群有更多的机会运行各种大规模数据处理应用程序。这些集群上的节点往往都配备了多核处理器,也就是多核集群。这些多核集群中通常会有多个层次的数据局部性和并行性,它们对整体性能都有影响。但是目前很少有研究去分析、优化这类系统上的应用程序的性能。本文将选取具有代表性的MapReduce应用程序,分析其在多核集群上的性能瓶颈。目前主流的MapReduce实现——Hadoop是运行于Java虚拟机之上的,我们的研究标明这种基于Java虚拟机的运行时(主要是任务执行器)在单机上并不能充分利用数据局部性和任务并行性。基于这个分析,本文提出层次化MapReduce模型来对Hadoop进行扩展,并将一个共享内存多核系统上的MapReduce实现集成到Hadoop上来,我们的原型系统称为Azwraith。为了复用跨任务间的数据,Azwraith还实现了一个基于共享内存的高速缓存模块,从而显著地降低网络和磁盘的流量。这样的层次化MapReduce模型使得MapReduce程序能够在单机和集群这两个层次上充分利用系统的数据局部性和任务并行性。性能测试是在一个7台节点组成的小规模集群上完成的。实验数据显示,实现了本文提出的各种优化的Azwraith系统,能提高原始Hadoop实现1.4倍到3.5倍的性能。