近年来,“大数据”技术已经逐渐成为学术界和工业界关注的热点问题。而Hadoop作为处理大数据的开发平台之一,不仅给我们带来了廉价的处理大数据的能力,同时还实现了代码开源化。其中,HDFS作为Hadoop最底层的分布式文件系统,存储着集群中所有存储节点的数据,它除了为MapReduce提供了高效的读写性能外,还有着高容错性和高吞吐量的特点。但是,HDFS对于这种多副本的存储设计采用了串行流水线式的存储方式,其制约了副本在HDFS中的存储性能。同时,随着互联网技术的不断发展,海量小文件的数据急剧增多,Hadoop秉承存储海量大文件的设计理念,在海量小文件的处理上严重制约了其存取性能。为此,本文针对上述两个问题展开了深入的研究,主要的工作内容及创新点总结如下:
本文针对HDFS中副本的串行存储方式所表现出来存储效率低下的问题,并根据相关研究人员提出的并行化存储方法,提出一种新的设计方案。结合该方案的优化设计思想,深入详细地分析了HDFS下的存储架构,以及相关类和数据块的结构,找到需要改进之处。通过创建与pipeline管道中所有DataNode节点的socket连接,实现了文件副本的并行存储。
针对海量小文件严重制约Hadoop的I/O性能的问题,本文提出在基于Hadoop下自带的SequenceFile合并方案的基础上,实现基于B+树索引的小文件读取方案,在提高小文件查找效率的同时,降低了小文件的元数据对NameNode节点内存空间的占用率,从而提高小文件的读取效率。在该方案的实现中,本文首先给出了B+树索引结构的设计。其次,针对B+树索引的构建与查找功能做了详细的分析与实现。最后,结合对HDFS文件读取过程的分析,实现了SequenceFile下基于B+树索引的小文件读取过程。
最后,搭建Hadoop系统集群,通过一系列的仿真实验,验证了本文所提出的两个设计方案在文件的存储速率和小文件的读取速率上是有效的。