刘毅
摘 要:随着Hadoop平台的日益完善,其应用范围越来越普及,但仍然存在诸多影响性能的问题,比如调度算法中Hadoop配置对象开销大、MapReduce阶段中排序对象的序列化及反序列的高开销问题。本文针对以上问题,提出解决方案。
关键词:Hadoop云平台;优化策略
1 研究背景
由于具备低成本和前所未有的高扩展性,Hadoop已被公认为是新一代的大数据处理平台。Hadoop正带来了新一轮的数据革命。虽然hadoop的应用价值已得到广泛认可,但其有诸多问题依然制约着hadoop的发展,优化hadoop性能主要可以从以下方面着手:
1.1 应用程序优化
考Hadoop云平台优化策略研究高效率的应用程序。
1.2 Hadoop参数优化
这种优化方法要结合操作协同层面的调优,对hadoop系统的诸多配置参数进行优化调整,使hadoop作业运行速度更快。
1.3 系统实现优化
这是源码级的优化,针对hadoop框架及实现机制中不合理的地方进行优化,优化难度大,效果也比较明显。
本文主要针对hadoop存储及系统实现中的几种高开销问题进行了研究并提出了改进措施。
2 存在的问题
2.1 Hadoop的Configuration开销大
Hadoop的Configuration的配置需要花费大量的时间,hadoop把对象的信息按照hashmap的方式存在于一个xml的配置文件中,读取、解压、分析均来自这一个磁盘的xml文件,这严重影响了IO性能,另外当取对象时需要去调用get()方法,而get()方法的参数会也会引起正则表达式计算和变量替换,这也需要耗费资源。如果对多个对象读取,上面的步骤通过循环语句去实现的话,性能更是将大打折扣。当对象很多的情况下hadoop花费30%用来配置对象。
2.2 中间压缩结果包含很多无用数据
spill线程中的压缩和解压缩操作会消耗消耗了大量时间,并且中间结果是临时的。如果使用lz4方法取代lzo level 3,可以减少了30%多的中间数据,并使其能被更快地读取。
2.3 hadoop中对对象序列化和反序列化消耗太高
对对象的序列化和反序列化是Hadoop Job中开销最高的操作,特别是对于那些进场使用并且复杂、非主键的key。在hadoop中需要将两个对象进行比较,通常的做法是对这些对象反序列化后再进行比较,但是反序列化是一个耗时的工程。下图1是极端情况下通过java-xprof工具检测得到的结果。
3 解决方法
传统的数据读写是按照row-oriented方式读写,也就是顺序读取存储,这样的方式优点是读写相对容易速度也相对较快,但缺点也是相当明显的就是每次读取都读写了一些无用的数据,并且文件的存储量也相对教大。传统存储的抽象图如图2和图3所示。
解决方法是将record顺序存储的方式改为面向列的数据格式。它遵循“先按列划分,再垂直划分”的设计理念。当查询过程中,针对它并不关心的列时,它会在IO上跳过这些列。也就是按需在磁盘上存取,这种面向列的数据读取方式被称为Parquet,下图4和图5说明了这种存取方式。
对比图2和图3由可以看出Parquet是面向列的存储,它使得同类型的字段被顺序排在一起。那么这种存储有什么好处呢,好处就是按列存储,可以有效地进行列投影,并且在进行反序列化的时候可以只反序列化需要的列。这样就大大缩减了因为反序列化消耗的时间,除此之外,存储的文件也会相应的减小很多,可以达到原来文件的一半。图6是了采用面向列存储后对某一列投影的示例图。
下图7是采用Parquet技术后,对比传统存储方式,使用java-xprof技术对hadoop运行效率做了一个跟踪对比,从图中可以看出当只有1字段时,Parquet存储方式是传统基础速度的3倍,当有10字段的时候是传统技术的1.5倍,速度提高明显。
4 总结
本文针对hadoop性能调优三种方法中的存储及系统实现进行了研究分析,提出了将row-oriented存储改进为Parquet存储,实验证明改为面向列的存储对系统性能的提高是有效的,但是从图7中可以看出随着列的增加,这种性能优势在降低,后续将针对这一情况进行深入的研究,完善这种技术。
参考文献
[1]刘鹏.云计算(第二版)[M].北京:电子工业出版社,2011.
[2]浅析Hadoop文件格式.[EB/OL].http://www.infoq.com/cn/articles/hadoop-file-format,2012-5-28.
[3]探究提高Hadoop稳定性与性能的方法 [EB/OL].http://dongxicheng.org/mapreduce/how-to-improve-hadoop-stablility-and-performance/,2013-12-29.
[4]王宏宇.hadoop平台在云计算中的应用[J].软件,2011,(4):36-39.
[5]黄晓云.基于HDFS的云存储服务系统研究[D].大连海事大学,2010.
[6]王永洲.基于HDFS的存储技术的研究[D].南京邮电大学,2013.
[7]高蓟超.Hadoop平台存储策略的研究与优化[D].北京交通大学,2012.