基于Hadoop的海量小文件处理性能研究与优化
【摘要】:随着大数据时代的到来,互联网数据与日俱增,传统的数据处理方式已经不能适应大数据的要求,Hadoop作为进行海量数据分析处理的云平台应运而生。目前,Hadoop已经被应用到数据分析、数据挖掘、机器学习等各个领域当中。
然而,它自设计之初,就是为了处理流数据访问模式的大数据。事实上,在能源、气候、天文、电子商务、电子图书馆等许多领域的现有系统中都包含着数量巨大的小文件。据2007年的一项调查表明,美国国家能源与科学计算研究中心包含着超过1300万的文件,其中,99%的文件大小在64MB以下,43%的文件大小在64KB以下。由于Hadoop平台采用单一的节点来管理整个分布式文件系统的元数据,海量小文件的出现就会给主节点带来巨大的内存压力,并且会大大影响到MapReduce编程模型的计算性能。
针对目前Hadoop平台不能高效的处理海量小文件而出现的小文件问题,文章首先提出一种基于曲线拟合最小二乘法的确定Hadoop平台下何为小文件的方法。该方法首先确定了小文件访问时间的量化方法,然后采用访问时间作为确立何为小文件的影响因子,通过对不同大小数据集的不同访问时间的实验,最终结合线性拟合的相关知识找到了小文件大小的量化方法。此外,为了提高MapReduce处理海量小文件的性能,本文提出了一种基于预处理的文件合并算法,并结合此算法分别对合并后的数据集和未处理过的小文件数据集进行词频统计处理,分别记录下合并前后每个文件数据集的处理时间。实验结果表明,采用本合并方法的数据处理时间比合并前大大降低,大大提高了MapReduce处理小文件的效率。在此基础上,本课题还研究并实现了CIFSF小文件处理算法,该算法是将小文件分片直接整合到一个分片中,最终调取map任务来处理分片。实验中对该算法的处理时间进行了记录,结果显示,CIFSF算法也是一种高效地处理海量小文件的算法。