Hadoop系统map阶段的排序性能分析与优化

2014-04-23 05:06周扬张恒生
电脑知识与技术 2014年7期
关键词:性能优化排序动态

周扬 张恒生

摘要:MapReduce计算框架已被广泛用于大规模数据分析的应用。虽然它具有弹性的可扩展性和细粒度的容错系统,然而性能却并不令人满意。MapReduce可以通过分配更多的计算节点来实现更好的性能,但是,这种做法并不符合成本效益。用户渴望MapReduce在提供弹性的可扩展性和细密度容错的同时,可以具有更高的计算效率。该文提出了一种动态优化map阶段排序性能的方法,并进行了测试,测试结果表明,该方法能够提升MapReduce的基准测试性能。

关键词:Hadoop;MapReduce;排序;性能优化;动态

中图分类号:TP302.7 文献标识码:A 文章编号:1009-3044(2014)07-1410-03

1 介绍

随着物联网、社交网络等新的互联网技术的发展,数据被大量产生。如何从海量数据中获得有用的信息,为用户提供好的用户体验,增强企业的竞争力,这对海量数据处理来说是一个挑战。目前MapReduce计算框架[1]已成为海量数据处理的便利工具,它提供了一个特定的编程框架,并且对用户封装了计算的分布式并行、系统的扩展性和容错性。

Hadoop[2]是根据MapReduce架构实现的一个开源系统,并逐渐成为业界应用的标准。一些企业使用Hadoop完成网页索引、数据挖掘、日志文件分析、财务分析、科学模拟以及生物信息学的研究。然而Hadoop处理数据的性能却难以令人满意,人们对它的性能做了很多研究与改进方案,包括对分布式文件系统HDFS的性能研究与提升[3],Job参数的自动优化[4],Task调度策略的优化[5],等。这些优化方案都是通过对系统资源进行更合理的利用来提高MapReduce计算框架的性能。然而经过对Hadoop系统map阶段排序流程的研究后,我们发现,在相同的系统资源利用率的情况下,通过调整一些排序参数,可以有效提高map阶段的性能。

本文提出并实现了一种动态优化map阶段排序性能的方法,能够提升MapReduce的基准测试性能。使用wordcount算法和Terasort算法进行了测试,测试结果表明,该动态优化方法可以提高map阶段的性能15~20%。

本文的组织如下,第二节介绍MapReduce的工作原理,第三节分析map阶段的排序流程,并给出动态优化排序性能的方法,第四节给出了测试结果与分析,最后给出结论。

2 MapReduce工作原理

MapReduce是一种编程模型,用于大规模数据集的并行运算。它借用函数式编程语言里的两个概念"Map"和"Reduce",来约束计算的并行模型。一个典型的MapReduce作业包括3个阶段:

1)准备阶段

当用户将作业提交给JobTracker进程后,JobTracker根据用户的作业配置参数以及处理数据的规模,生成若干个独立的“map”任务和“reduce”任务。这些任务将会在不同的TaskTracker节点上执行,从而有效地利用集群的资源来提高作业的执行效率。

2)map阶段

当TaskTracker有空闲的资源时,它会从JobTracker请求任务来执行。JobTracker会优先调度“map”任务给TaskTracker节点。若TaskTracker请求到一个新的“map”任务时,它会从HDFS中获取输入数据(一个文件分片)并启动一个JVM虚拟机来执行这个“map”任务。

“map”任务的执行过程首先是从输入数据中抽取一条记录,然后对该记录应用用户定义的处理代码(即用户的map函数),处理结果的记录将写入内存。当处理结果的记录达到一定数目后,会进行快速排序;当处理结果的记录占用内存达到一定的阈值或者输入数据全部处理完毕,会对快速排序的结果做一次合并排序并进行分区,最后写到本地的文件系统中。

3)Reduce阶段

若TaskTracker请求到一个新的“reduce”任务时,它需要从已完成的map任务所在的TaskTracker节点上获取输入数据。首先从JobTracker上监听已完成的“map”任务,任务所在的TaskTracker节点,对应的分区数据在节点文件系统中的偏移量;然后使用HTTP协议从TaskTracker节点上读取“reduce”任务所需要的数据。

当“reduce”任务获取了所有“map”任务的结果数据后,它会将这些数据进行一次合并,并对合并的结果应用用户定义的处理代码(即用户的reduce函数),处理结果的记录将写入HDFS。

3 Map阶段排序优化方法

Map阶段的数据处理过程是一个对输入数据的映射(map)计算、排序和分区,然后写入磁盘的过程。为了方便描述“map”阶段的过程研究,首先介绍一下map阶段的数据特征和内存资源特征。

4 实验结果

测试环境配置6个节点,每个节点有2路4核cpu,48G内存,12块1T的sata磁盘。Hadoop版本是CDH4.2.1的MapReduce,测试软件是HiBench2.2。在测试实验中,首先在保留与n相关的参数为初始配置的前提下,通过调整其它参数,使算法的性能达到最优,即系统资源完全被使用。然后再通过通过动态调整与n相关的参数,来测试该方法对性能的影响。

MapReduce的wordcount算法的资源瓶颈在于cpu,通过调整节点的map槽数,使节点的cpu利用率达到94%,然后再测试动态优化方法对性能的影响。对wordcount算法的测试结果如图2所示,在节点不同的数据量下,10G/节点、30G/节点和50G/节点时,对比测试了优化前后的性能。测试结果显示,优化后的性能比优化前大约提升20%。

5 结论

本文提出了一种Hadoop系统map阶段的排序动态优化方法,通过对wordcount的测试结果表明,优化后的性能可以有效提高map阶段性能,从而提升MapReduce的基准测试性能。

参考文献:

[1] J. Dean and S. Ghemawat.Mapreduce: Simpli?ed data processing on large clusters[J].In OSDI, pages,2004:137-150.

[2] Apache hadoop. http://hadoop.apache.org/.

[3] 栾亚建,黄翀民,龚高晟,赵铁柱.Hadoop平台的性能优化研究[J].计算机工程,2010(14).

[4] S. Babu.Towards automatic optimization of mapreduce programs[J].In SoCC,2010:137-142.

[5] Jiang D, Ooi B C, Shi L, et al. The Performance of MapReduce: An In-depth Study[J].PVLDB, 2010,3(1):1207-1218.

猜你喜欢
性能优化排序动态
国内动态
国内动态
国内动态
排序不等式
恐怖排序
动态
节日排序
SQL Server数据库性能优化的几点分析
Web应用的前端性能优化
Oracle数据库性能调整与优化分析