论文部分内容阅读
在这个云计算和大数据飞速发展的时代,每天都有不计其数的数据产生,其中小文件比例相当高。许多大型的公司使用Hadoop来进行海量数据的分布式存储和计算,而当集群中存在大量小文件时,Hadoop的性能十分低下。本文针对Hadoop在存储小文件时的问题,提出了一种结合Hbase和文件合并索引来对不同特征小文件进行处理的方案,并设计了基于多队列置换算法的缓存,并通过实验验证,减少了 Namendoe内存占用以及读写大量小文件的耗时,优化了存储性能。本文首先分析了 Hadoop存储海量小文件的研究现状,并介绍了 Hadoop的框架结构,接着对分布式文件系统HDFS、分布式计算框架MapReduce以及分布式数据库Hbase的工作机理进行了深入研究,重点分析了 HDFS的架构以及读写文件的流程,总结出HDFS在存储海量小文件时Namenode内存占用高及读写效率低的原因。然后,本文对小文件存储中存在的问题进行分析,对小文件的存储方案进行整体设计,对不同特征的小文件文件采用不同处理方法。针对大量Namenode内存占用的问题,本文采用根据文件类型特征进行合并的方案,从而使文件数量大大减少,并提高文件写入效率。对于小文件读取性能低下的问题,本文为小文件设计了基于单词查找树的索引,保证小文件可以完整高效的从合并后的大文件中取回,为了进一步提高文件读取效率,应对部分热点数据的频繁读取,在Datanode中设计了基于多队列置换算法的缓存,避免了热点数据大量频繁的请求磁盘,导致读取性能差的问题。由于文件合并后需要将索引存储在内存中,如果存在大量的超小文件,会使索引文件过大,导致检索性能下降。本文提出在文件写入集群时,对文件进行筛选识别处理,将超小文件存储到设计好的Hbase表中,使超小文件的文件的存储便捷高效,提高超小文件的检索性能,而且避免了 Hbase对较大文件处理时的低效。而普通的小文件则采用合并索引缓存的流程处理,使方案可以在不同文件分布的场景下,都能表现出较高的性能。最后,本文搭建Hadoop集群,将设计的方案与原始的HDFS以及其他方案进行比较,并在Namenode内存占用以及小文件读写性能等方面进行对比分析。实验表明,本文提出的方案可以大大减少Namenode内存占用,并在提高了集群对海量小文件的读写性能。