Hadoop云平台优化策略研究

2015-04-29 16:38刘毅
科技尚品 2015年11期
关键词:序列化字段对象

刘毅

摘 要:随着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.

猜你喜欢
序列化字段对象
神秘来电
图书馆中文图书编目外包数据质量控制分析
如何建构序列化阅读教学
攻略对象的心思好难猜
基于熵的快速扫描法的FNEA初始对象的生成方法
Java 反序列化漏洞研究
区间对象族的可镇定性分析
作文训练微格化、序列化初探
CNMARC304字段和314字段责任附注方式解析
无正题名文献著录方法评述