论文部分内容阅读
随着互联网的快速发展,数字信息呈现指数级的增长,人类已经迈进了大数.据的时代。在数据存储和计算方面,传统的方法已经显得越来越没有优势。怎样高效以及合理地存储计算大批量数据已经成为国内外各行各业关心的重点。鉴于对数据计算以及数据存储的高要求,云计算的概念由此产生。随着云计算技术的迅速发展,存储和计算成为最热门的研究范畴。Hadoop是Apache基金会的一个开源的项目,它在分布式存储以及分布式计算方面表现出杰出的性能,引发了国内外广泛的关注,目前,越来越多的高校以及企业都开始应用Hadoop支撑自己的业务与需求。尽管Hadoop是专门为存储和计算大数据而设计的,但是当Hadoop存储小文件时,会给主节点带来巨大的内存压力,影响文件的访问效率,并且间接影响MapReduce编程模型的计算效率。本文基于Hadoop的MapReduce计算模型和HDFS分布式文件系统两个核心内容,着重研究了基于Hadoop的小文件处理技术的通用优化。为了解决Hadoop技术在存储和计算小文件时会给NameNode节点造成内存的浪费、读取文件效率低下以及MapReduce模型计算效率低的问题,首先研究Hadoop本身自带的小文件处理技术,深入分析了它们的优缺点,并分别从MapReduce层面和HDFS层面对Hadoop进行研究与优化,提高Hadoop存储、计算小文件的效率。在MapReduce层面,对MapReduce的执行流程以及InputFormat体系结构进行深入研究,详细分析MapReduce源代码以及内部方法的具体实现。通过深入研究以及实现CombineFileInputFormat抽象类,在MapReduce层面对小文件的输入格式进行合并,提高了Hadoop对小文件的计算效率。在HDFS层面,本文提出一种具有独立小文件处理模块的分布式文件系统,它不依赖于HDFS,整个模块可以和Hadoop集群做到很好的解耦,互不影响。此模块对小文件进行合并,索引映射以及读取,并加入小文件缓存模块,提高文件的访问效率,并间接提高MapReduce在计算处理小文件时的效率。最后,通过实验验证,自定义的CombineFileInputFormat在MapReduce的处理效率上高于其他的输入格式。独立的小文件处理模块,也加速了对文件的访问,并且降低了主节点的内存压力。