一种提高云存储中小文件存储效率的方案

针对基于HDFS的云存储系统中小文件存储效率不高的问题,采用序列文件技术设计了一个云存储系统中小文件的处理方案。该方案利用多维属性决策理论,综合读文件时间、合并文件时间及节省内存空间大小等指标,得出合并小文件的最优方式,能够在消耗的时间和节省的内存空间之间取得平衡;设计基于层次分析法的系统负载预测算法对系统负载进行预测,从而实现负载均衡的目的;利用序列文件技术对小文件进行合并。

实验结果表明,在不影响存储系统运行状况的基础上,该方案提高了HDFS(Hadoop distributed file system)是一种具有高度容错性质的分布式文件系统模型,可以部署在支持JAVA运行环境的普通机器或虚拟机上,能够提供高吞吐量的数据访问,非常适合部署云存储平台。

HDFS采用主从式架构设计模式(master/slavearchitecture),一个名称节点(NameNode)和若干数据节点(DataNode)构成HDFS集群。HDFS的这种单名称节点的设计极大地简化了文件系统的结构,然而也因此引发了HDFS的小文件存储效率低的问题。因为HDFS中的每个目录和文件的元数据信息都存放在名称节点的内存中,如果系统中存在大量的小文件(指那些比HDFS数据块(默认为64MB)d,得多的文件),则无疑会降低整个存储系统的存储效率和存储能力。

在各种存储系统中,存在大量这样的小文件。美国西北太平洋国家实验室2007年的一份研究报告表明,他们系统中有1 200万个文件,其中94%的文件小于64 MB,58%的小于64 kB。在一些具体的科研计算环境中,也存在大量的小文件,例如,在某些生物学计算中可能会产生3 000万个文件,而其平均大小只有190 kB。

解决基于HDFS的存储系统中小文件存储效率问题的主流思想是将小文件合并或组合为大文件,目前主要的方法分为2种,一种是利用Hadoop归档(Hadoop archive,HAR)等技术实现小文件合并的方法,另一种则是针对具体的应用而提出的文件组合方法。

Mackey等利用HAR技术实现小文件的合并,从而提高了HDFS中元数据的存储效率。Liu等结合WebGIS应用,以Hadoop为存储平台开发了HDWebGIS原型系统;结合WebGIS访问模式的特点,将小文件组合为大文件并为其建立全局索引,从而提高了小文件存储效率。Dong等[4]针对BlueSky系统中PPT课件的存储问题,提出了将小文件合并到大文件中并结合预取机制来提高系统存储和访问小文件的效率的方法。刘立坤等对分布式存储系统中小文件的并发访问进行了优化。

以上的研究工作都是基于文件的合并或组合来解决小文件存储效率不高的问题,然而还存在以下2个问题:第一,作为一个完整的系统,在提高小文件存储效率的同时,也应该考虑到系统的负载状况,因为不管是文件合并还是文件组合,对HDFS而言都是一个额外的操作;第二,未对小文件合并规模进行研究,即尚未确定多少个小文件合并为一个大文件可以使系统性能达到最优。

基于以上两点,本文提出了一个面向HDFS的云存储系统中小文件存储效率的优化方案:采用序列文件技术将小文件合并为大文件,结合多属性决策理论和实验得出合并文件的最优方式,通过基于层次分析法(analytic hierarchy process,AHP)的系统负载预测算法实现系统的负载均衡。

1 小文件存储效率优化方案设计

在构建的云存储系统中,采用多叉树的结构来构建文件索引。用户将文件上传到云存储系统后,系统会自动根据用户文件的组织形式建立对应的多叉树索引。

1.1序列文件合并技术

序列文件(SequenceFile)是HDFS提供的一种二进制文件技术,这种二进制文件直接将对序列化到文件,文件序列化时可实现基于记录或数据块的压缩。在云存储系统中,对二进制文件采用SequenceFile技术将小文件合并为大文件,以小文件的索引号为key、内容为value的形式进行合并,合并的同时实现基于数据块的压缩,这样,在节省名称节点内存空间的同时也节省了数据节点的磁盘空间。

1.2小文件存储效率优化方案

在基于HDFS的云存储系统中,小文件存储效率优化方案如图1所示。为提高对小文件的处理效率,系统为每个用户建立了3种队列:第1种为序列文件队列(SequenceFile queue,SFQ),第2种为序列文件操作队列(SequenceFile operation queue,SFOQ),第3种为备用队列(Backup queue,BQ)。其中,SFQ用于小文件的合并,SFOQ用于对合并后小文件的操作,BQ用于操作的小文件数超过SFQ或SFOQ长度的情况。3种队列的长度一致,可通过实验得出队列长度的最优值。下面介绍具体的处理流程。

一种提高云存储中小文件存储效率的方案

图1 小文件存储效率优化方案

如图1所示,用户将本地的文件上传至云存储服务器(过程1),然后服务器开始对该文件的类型进行判断(过程2),如果是小文件,将该文件的索引号放入SFQ中(过程3)。当SFQ满时,将发送“队列满”信号(QF)给控制器,如图中虚线口所示,而当定时器到定时点时,将发送“时间到”信号(TU)给控制器,如虚线b所示。接收到QF或者TU信号后,控制器开始读取SFQ的相关信息(过程4.1),对系统负载进行计算(过程4.2)(具体算法在第2节中介绍),并据此决定是否进行小文件的合并(过程5)。文件合并后完成小文件与大文件之间的映射(过程6)控制器的具体处理逻辑如图2所示。

当控制器接收到信号时,首先判断信号类型,如果是QF,则调用基于AHP的系统负载预测算法计算系统负载。如果得到的系统负载低于系统设定的阈值,则开始合并文件(包括SFQ和BQ),并取消系统中的TU信号;如果系统负载大于系统设定的阈值,则进一步判断BQ的数量,若BQ数量小于某个值(例如3),则新建BQ,将SFQ转移到BQ中并推迟合并操作(系统中设定推迟的时间为30 min),设定TU信号,若BQ数量大于3,则将BQ中的小文件进行合并,取消系统中的TU信号。

相关推荐