一种分级存储系统中的海量小文件迁移方法与流程

文档序号:12364031阅读:267来源:国知局

本发明属于存储技术领域,更具体地,涉及一种分级存储系统中的海量小文件迁移方法。



背景技术:

随着计算机和网络技术的快速发展,全球数据呈爆炸式增长,据统计,2020年全球数据总量预计将超过40ZB(约4万亿GB),是2011年的22倍,在过去几年,全球数据量正以每年58%的速度增长。大型互联网站需要存储、管理海量数据,需要使用大量服务器。

伴随着数据和访问量的增长,为解决大数据和高并发问题的分布式技术发展也越来越成熟。在计算方面,任何高配置的单机已无法满足性能需求,因此衍生了分布式计算,在存储方面,任何稳定的单机文件系统已无法满足容量需求,因此衍生了分布式文件系统。然而,各分布式文件系统因其总体架构设计和数据组织方式的差异,在读写性能,存储容量,硬件要求以及小文件处理方面都有着不同的表现,单一的分布式文件系统往往难以在性能和容量方面有较好的统一。综合高性能的Lustre和大容量的Hadoop分布式文件系统(Hadoop Distributed File System,简称HDFS)的分级存储系统,采用计算机存储系统中的缓存思想,可以实现性能和容量的统一。

因为Lustre与HDFS之间的异构性,在两级文件系统之间进行调度数据需要以文件为单位,当系统中有大量小文件需要迁移时,对每个文件而言用于数据传输的时间比例将大大减小,传输大量小文件不得不频繁的建立和释放连接。假设传输一个小文件的过程中,建立和释放连接需要3ms, 传输数据需要6ms,那么迁移100个小文件则需要900ms,这造成了小文件迁移效率的低下。

小文件合并是一种常用的海量小文件解决方案,常见做法是为一定数量小文件建立索引,索引和小文件内容以大文件形式保存。小文件读取过程需要先读大文件,再从大文件内部读索引定位小文件。目前有Hadoop Archive、SequenceFile和MapFile三种方式三种合并方式。

Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,通过将多个小文件打包成一个HAR文件,在减少Namenode内存使用的同时,仍然允许对文件进行透明的访问。SequenceFile是Hadoop API提供的一种二进制文件支持,将文件名存入key,文件内容存入value,则可以将大量小文件合并成一个大文件。MapFile是带索引版的SequenceFile,是排序后的SequenceFile,序列化的将文件名存入key,文件内容存入value,合并成为大文件。以此同时并建立从小文件到大文件之间的映射关系。

针对前文所提出的分级存储系统,在采用小文件合并技术提高归档过程中小文件迁移效率后,在需要从后端文件系统中恢复小文件至前端文件系统时,面临以下两个问题:①若从大文件中单个读取出小文件再合并,需要多次访问Namenode,并需要每次都从大文件中读出小文件,另外还有在内存重新对小文件合并的时间开销;②若直接从后端读取整个大文件,将会有无效数据传至前端文件系统。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种分级存储系统中的海量小文件迁移方法,其目的在于,解决现有迁移方案中所存在的海量小文件传输效率低的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种分级存储系统中的海量小文件迁移方法,包括以下步骤:

(1)从客户端接收多个文件请求,并判断这些文件请求是归档请求还是读取请求,如果是归档请求,则进入步骤(2),如果是读取请求,则转入步骤(11);

(2)采用文件相关性量化模型对归档请求对应的磁盘中的N个小文件,进行文件相关性计算,并形成N*N的相关性矩阵,该矩阵中的元素(i,j)表示第i个小文件和第j个小文件之间的文件相关性;

(3)初始化计数器k=1;

(4)初始化计数器sum=0;

(5)取相关性矩阵中第1列中相关性值最大的一个小文件,并将该小文件对应的归档请求放入第k个归档请求集合中,该相关性值在矩阵中的行号为m,列号为1,并设置sum=sum+该小文件的大小;

(6)判断sum的值是否大于或等于第一阈值,如果是则转入步骤(7),否则转入步骤(8);

(7)删除该相关性矩阵中的第1行和第1列,设置k=k+1,并判断该相关性矩阵是否是空矩阵,如果是,则转入步骤(9),否则返回步骤(4);

(8)删除相关性矩阵中第m行和第m列,设置N=N-1,并判断N是否为0,如果是则转入步骤(9),否则返回步骤(5);

(9)对于k个归档请求集合中的每一个而言,读取该归档请求集合中所有归档请求对应的小文件,并将这些小文件合并为大文件;

(10)将所有k个大文件传送到后端文件系统;

(11)将所有的读取请求按照其对应的小文件在后端文件系统中对应的大文件划分为多个读取请求集合,其数量为M;

(12)设置计数器n=1;

(13)取第i个读取请求集合,并计算该读取请求集合的有效数据率,其等于该集合中所有读取请求所对应的小文件的大小之和/该集合中所有读 取请求对应的小文件在后端文件系统中对应的大文件的大小S;

(14)判断计算得到的有效数据率是否大于第二阈值,如果是则转入步骤(15),否则转入步骤(16);

(15)在后端文件系统中直接读取该集合中所有读取请求对应的小文件在后端文件系统中对应的大文件,并将该大文件传送到前端文件系统,然后转入步骤(17);

(16)在后端文件系统中读取该集合中所有读取请求对应的小文件,并将其合并为大文件,并将该大文件传送到前端文件系统,然后转入步骤(17);

(17)设置计数器n=n+1,并判断n是否大于或等于M,如果是则过程结束,否则返回步骤(13)。

优选地,步骤(11)中,假如不同的读取请求,其对应的小文件在后端文件系统中对应的大文件是同一个,则将这些读取请求划分为同一个读取请求集合中。

优选地,第二阈值c的计算公式为:

<mrow> <mi>c</mi> <mo>=</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mrow> <mo>(</mo> <mi>p</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> <msub> <mi>t</mi> <mi>f</mi> </msub> <mo>+</mo> <msub> <mi>pt</mi> <mi>i</mi> </msub> <mo>+</mo> <msub> <mi>t</mi> <mi>c</mi> </msub> </mrow> <mrow> <mi>S</mi> <mrow> <mo>(</mo> <mn>1</mn> <mo>/</mo> <msub> <mi>c</mi> <mi>d</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>/</mo> <msub> <mi>c</mi> <mi>n</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> </mrow>

其中tf表示在从后端文件系统中读取文件时,从名字节点定位到大文件位置的时间,ti表示从大文件定位到小文件的时间,cd表示后端文件系统中磁盘的数据传输率,tc表示小文件在内存合并成大文件时间开销,cn为前端文件系统和后端文件系统间的网络传输带宽,tf、ti、cd、cn和tc均可通过性能测试测得;p为读取请求集合中读取请求对应的小文件的数量。

优选地,前端文件系统是Lustre文件系统,后端文件系统是HDFS文件系统。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

1、本发明能够解决现有方法中存在的小文件迁移效率低的技术问题:由于采用了步骤(2)和步骤(9),在传输海量小文件之前对其进行了相关性分析和小文件合并,一方面提高了大文件的有效数据率,另一方面极大减少了传输过程中建立和释放连接的次数,使短连接变为长连接,因此能够解决小文件传输过程中单个传输小文件时的性能瓶颈。

2、本发明能够解决小文件读取过程中读取性能低的技术问题:由于采用了步骤(14)、步骤(15)和步骤(16),在小文件读取过程中综合权衡从大文件中读取小文件的时耗和通信线路传输无效数据的时耗,动态选择单个小文件读取合并再传输和直接读取大文件整个传输中较优方案,因此能够解决小文件读取过程中因单个读取小文件并且单个传输而带来的性能问题。

附图说明

图1是本发明分级存储系统中的海量小文件迁移方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

针对前文所提出的分级存储系统,在采用小文件合并技术提高归档过程中小文件迁移效率后,在需要从后端文件系统中恢复小文件至前端文件系统时,将面临以下两个问题:①若从大文件中单个读取出小文件再合并,需要多次访问Namenode,并需要每次都从大文件中读出小文件,另外还有在内存重新对小文件合并的时间开销;②若直接从后端读取整个大文件, 将会有无效数据传至前端文件系统。本发明针对这两种方案进行折中,定量分析两种方案的时间开销,通过预先对小文件请求的处理,计算两种方案的时间开销并进行权衡,选择最优方案进行传输。

如图1所示,本发明分级存储系统中的海量小文件迁移方法包括以下步骤:

(1)从客户端接收多个文件请求,并判断这些文件请求是归档请求还是读取请求,如果是归档请求,则进入步骤(2),如果是读取请求,则转入步骤(11);

(2)采用文件相关性量化模型(FARMER模型)对归档请求对应的磁盘中的多个小文件(其总数为N,N为自然数)进行文件相关性计算,并形成N*N的相关性矩阵,该矩阵中的元素(i,j)表示第i个小文件和第j个小文件之间的文件相关性;

(3)初始化计数器k=1;

(4)初始化计数器sum=0;

(5)取相关性矩阵中第1列中相关性值最大的一个小文件,并将该小文件对应的归档请求放入第k个归档请求集合中,该相关性值在矩阵中的行号为m,列号为1,并设置sum=sum+该小文件的大小;

(6)判断sum的值是否大于或等于第一阈值,如果是则转入步骤(7),否则转入步骤(8);在本实施方式中,第一阈值为10Mb至128Mb之间;

(7)删除该相关性矩阵中的第1行和第1列,设置k=k+1,并判断该相关性矩阵是否是空矩阵,如果是,则转入步骤(9),否则返回步骤(4);

(8)删除相关性矩阵中第m行和第m列,设置N=N-1,并判断N是否为0,如果是则转入步骤(9),否则返回步骤(5);

(9)对于k个归档请求集合中的每一个而言,读取该归档请求集合中所有归档请求对应的小文件,并将这些小文件合并为大文件;

(10)将所有k个大文件传送到后端文件系统;

(11)将所有的读取请求按照其对应的小文件在后端文件系统中对应的大文件划分为多个读取请求集合,其数量为M;具体而言,假如不同的读取请求,其对应的小文件在后端文件系统中对应的大文件是同一个,则将这些读取请求划分为同一个读取请求集合中;

(12)设置计数器n=1;

(13)取第i个读取请求集合,并计算该读取请求集合的有效数据率,其等于该集合中所有读取请求所对应的小文件的大小之和/该集合中所有读取请求对应的小文件在后端文件系统中对应的大文件的大小S;

(14)判断计算得到的有效数据率是否大于第二阈值,如果是则转入步骤(15),否则转入步骤(16);具体而言,第二阈值c的计算公式为:

<mrow> <mi>c</mi> <mo>=</mo> <mn>1</mn> <mo>-</mo> <mfrac> <mrow> <mo>(</mo> <mi>p</mi> <mo>-</mo> <mn>1</mn> <mo>)</mo> <msub> <mi>t</mi> <mi>f</mi> </msub> <mo>+</mo> <msub> <mi>pt</mi> <mi>i</mi> </msub> <mo>+</mo> <msub> <mi>t</mi> <mi>c</mi> </msub> </mrow> <mrow> <mi>S</mi> <mrow> <mo>(</mo> <mn>1</mn> <mo>/</mo> <msub> <mi>c</mi> <mi>d</mi> </msub> <mo>+</mo> <mn>1</mn> <mo>/</mo> <msub> <mi>c</mi> <mi>n</mi> </msub> <mo>)</mo> </mrow> </mrow> </mfrac> </mrow>

其中tf表示在从后端文件系统中读取文件时,从名字节点定位到大文件位置的时间,ti表示从大文件定位到小文件的时间,cd表示后端文件系统中磁盘的数据传输率,tc表示小文件在内存合并成大文件时间开销,cn为前端文件系统和后端文件系统间的网络传输带宽,tf、ti、cd、cn和tc均可通过性能测试测得;p为读取请求集合中读取请求对应的小文件的数量;

(15)在后端文件系统中直接读取该集合中所有读取请求对应的小文件在后端文件系统中对应的大文件,并将该大文件传送到前端文件系统,然后转入步骤(17);

(16)在后端文件系统中读取该集合中所有读取请求对应的小文件,并将其合并为大文件,并将该大文件传送到前端文件系统,然后转入步骤(17);

(17)设置计数器n=n+1,并判断n是否大于或等于M,如果是则过 程结束,否则返回步骤(13)。

在本实施方式中,前端文件系统是Lustre文件系统,后端文件系统是HDFS文件系统。

本发明提出在分级存储系统中,前端文件系统采用高性能的Lustre文件系统对用户提供高质量的服务,后端文件系统采用大容量的HDFS文件系统,保证数据的可靠存储。一级存储的数据可基于策略(如基于生命周期的管理技术)来将前端冷数据迁移至后端大容量的备份系统中提供可靠的数据存储。当系统访问的数据不在一级存储系统中,按需地将备份系统中的数据迁移至一级存储中。因为Lustre与HDFS之间的异构性,在两级文件系统之间进行调度数据需要以文件为单位,当系统中有大量小文件需要迁移时,对每个文件而言用于数据传输的时间比例将大大减小,传输大量小文件不得不频繁的建立和释放连接。本发明提出通过引入小文件合并技术,有效的减少小文件传输过程中的资源调度开销,从而提高数据传输效率。另外,在分级存储系统中,对海量小文件进行合并后,再对生成的大文件进行在线重删,一方面可以减少两级文件系统之间重复数据的传输,另一方面数据在后端HDFS中以数据块和指纹集形式保存,可以更有效的利用后端存储空间。

本发明提出了阈值计算择优的读取方案,与归档过程相对应的是文件的读取。在分级存储系统中,需要归档文件时,收集调度请求,按照相应的相关性算法对相关性较强的小文件进行合并,批量传输小文件,可以提高小文件在两级文件系统之间的归档效率。而当需要从后端文件系统中恢复数据到前端文件系统时,因为后端文件系统存储的是合并后的大文件,因此有如下几种方案可供选择。第一,因为小文件在后端文件系统是保存在大文件中,而后端文件系统HDFS的名字节点中仅保存大文件元数据信息,小文件元数据信息保存在大文件内,如果要从HDFS中读取小文件,必须先从HDFS中先定位到大文件,然后再从大文件中读取小文件元数据 信息,获得小文件在大文件内的偏移以及小文件大小,最后读取小文件。当读出的小文件累积到一定程度后,对小文件进行合并,然后将合并后的大文件传至前端文件系统。第二,考虑到方案一所带来的问题,可以选择直接将小文件所在的大文件整个从磁盘中读出,然后传至前端文件系统。本发明定量分析两种方案的时间开销,通过阈值计算,取两者的临界值,然后将实际有效数据率与此临界值作比较,最终决定采用何种方案进行数据传输。

综上所述,本发明中,为解决海量小文件在两级文件系统之间的迁移效率问题,针对归档过程,提出了基于小文件合并的归档方案,针对读取过程,提出了阈值择优传输方案,解决方案考虑到小文件传输过程中建立和释放连接占据大部分时间开销,通过小文件合并成大文件传输来解决瓶颈,另外在读取过程中,综合权衡从大文件中读取小文件的时耗和通信线路传输无效数据的时耗,动态选择单个小文件读取合并再传输和直接读取大文件整个传输中较优方案,实现海量小文件的高效传输;最后,采用数据重删技术对合并后的大文件进行差分传输,减少了数据传输量,再次提高了小文件的迁移效率。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1