一种共享文件系统多文件快速聚合和读取的方法转让专利

申请号 : CN201410600003.9

文献号 : CN104410868B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 褚震宇徐荣波王付生

申请人 : 北京中科大洋科技发展股份有限公司

摘要 :

本发明涉及一种共享文件系统多文件快速聚合和读取的方法,包括:多文件快速聚合;打开文件;获取元数据;读取或修改文件;关闭文件。“多文件快速聚合”包括:检测聚合子文件有效性;检测聚合是否为追加聚合;创建聚合文件;建立聚合文件与聚合子文件映射关系;处理聚合子文件。“获取元数据的步骤”包括:开辟存储空间;选择处理;检测获取元数据的文件是否为聚合文件;获取聚合文件与聚合子文件映射关系;获取元数据。本发明通过快速聚合方法将多个客户端产生的文件在短时间内快速聚合成一个大文件或将多个文件快速追加聚合到已存在大文件后面,在聚合过程中不产生文件拷贝工作,快速聚合的文件和使用物理聚合方法后生成的文件完全相同。

权利要求 :

1.一种共享文件系统多文件快速聚合方法,所述的方法中所使用的硬件系统包括:多个客户端通过传输大体积文件的高速网络与元数据服务器和磁盘列阵连接,所述的多个客户端同时还通过传输元数据和控制及交互信息的网络与元数据服务器连接,所述方法的步骤如下:生成子文件的步骤:多个客户端按照预设的聚合规则分别执行同一处理任务的不同部分,每部分生成为一个独立的子文件;

多文件快速聚合的步骤:共享文件系统对需要聚合的多个子文件进行有效检查并快速的进行“逻辑聚合”,把多个子文件快速聚合或快速追加聚合成一个聚合文件,所述的“逻辑聚合”是指:在聚合过程中,所有文件始终存在于共享存储中,不对文件进行拷贝和读取工作;

其特征在于,

所述的“多文件快速聚合的步骤”包括以下子步骤:

检测聚合子文件有效性的子步骤:文件系统在进行文件快速聚合时检测所有需要聚合的子文件有效性以及是否满足聚合规则,如果“否”则退出多文件快速聚合步骤,如果“是”则进入下一子步骤;

检测聚合是否为追加聚合的子步骤:文件系统在进行文件快速聚合时检测聚合是否是在原来聚合文件的基础上进行追加聚合,如果为追加聚合需要检测已存在聚合文件是否满足追加聚合规则,如果是追加聚合且满足追加聚合规则进入建立聚合文件与聚合子文件映射关系的子步骤,否则如果是追加聚合但不满足追加聚合规则就退出多文件快速聚合步骤;如果不是追加聚合则进入下一子步骤;

创建聚合文件的子步骤:根据客户端请求的聚合文件信息和各子文件属性信息创建聚合文件,并计算聚合文件的相关属性信息;

建立聚合文件与聚合子文件映射关系的子步骤:根据需要聚合的每个子文件相关属性信息,更新聚合文件的相关属性信息,建立聚合文件和每个子文件的映射关系。

2.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,所述的多文件快速聚合的步骤还包括处理聚合子文件的子步骤:聚合完成后,对聚合子文件进行处理,使客户端不再查看到聚合子文件信息。

3.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,所述的“生成子文件的步骤”包括如下子步骤:处理任务分配的子步骤:将同一处理任务根据聚合规则的的要求拆分成多个子处理任务,将子任务分派给不同的客户端执行;

计算子文件的子步骤:多个客户端对分配的子处理任务执行分布式计算,生成各自对应的子文件;在子文件的封装过程中如果子文件长度不是文件系统块大小的整数倍,必要时对不足位补空白数据。

4.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,所述的聚合规则包括子文件的大小为文件系统块的整数倍。

5.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,所述的计算包括编码格式转换和,或渲染合成。

6.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,所述的分别生成的方式为使用分布式计算的方式生成。

7.如权利要求1所述的共享文件系统多文件快速聚合方法,其特征在于,如果处理任务是转码任务或者打包任务,生成的目标文件的视频压缩编码选用固定码率的编码方式。

8.一种如权利要求1所述的聚合文件的读取方法,所述方法的步骤包括:

打开文件的步骤:用于客户端向元数据服务器发出请求,要求打开磁盘阵列中待读取的文件;

处理元数据的步骤:客户端根据待读取文件的内容,向元数据服务器申请获取待读取文件所对应的元数据,客户端获取相应元数据,同时客户端接受分配给自己的机会锁;

读取文件的步骤:客户端获取元数据段,并根据所获得的元数据段,对磁盘阵列发起读取文件的块数据请求,以完成该元数据段对应块数据读取操作,循环的申请元数据段和读取元数据段对应的块数据,直至完成所需数据的读取;

文件关闭的步骤:客户端向元数据服务器发出要求,关闭已打开的读取文件句柄,完成本次文件读取;

其特征在于,所述的“处理元数据的步骤”中元数据服务器在正常处理客户端请求待操作文件的元数据外还需要另外检测获取元数据的文件是否为聚合文件,包括以下子步骤:开辟存储空间的子步骤:用于客户端在本地内存或硬盘中开辟用于存储元数据的存储空间;

选择处理的子步骤:用于客户端对元数据申请请求选择是放在后台队列等待还是实时处理,如果是后台等待则将元数据申请请求放入元数据请求队列中等待,如果是实时处理则进入下一子步骤;

检测获取元数据的文件是否聚合文件的子步骤:用于元数据服务器检测客户端发起获取元数据请求的文件是否为聚合文件,如果“否”则进入“获取元数据的子步骤”,如果“是”则进入下一子步骤;

获取聚合文件与聚合子文件映射关系子步骤:根据客户端请求的聚合文件的元数据信息,获取与之相对应聚合子文件的映射关系;

获取元数据的子步骤:根据请求获取相对应文件的元数据返回给客户端。

说明书 :

一种共享文件系统多文件快速聚合和读取的方法

技术领域

[0001] 本发明涉及一种共享文件系统多文件快速聚合和读取的方法,是一种应用于共享文件系统视音频领域分布式转码、分布式打包等集群计算产生多个文件进行快速聚合的方法,是一种适用于广电应用领域的共享文件系统下的多文件快速聚合的方法。

背景技术

[0002] 目前,通用的共享文件系统由元数据服务器(MDS)、共享存储和多客户端通过LAN网络和SAN网络组成,元数据服务器和客户端都可以通过FC或ISCSI协议直接访问共享存储,分别为FC-SAN和IP-SAN架构。SAN网络由于是光纤传输,带宽、容量大、速度快,常用来传输数据量巨大的文件,如:视频文件。
[0003] SAN共享文件系统中的元数据是描述数据组织方法的数据结构,元数据主要记录了SAN共享文件系统中该文件在块设备上的划分方法、存放位置以及文件的一些相关属性等。SAN共享文件系统通过元数据将连续的块设备存储组织成文件结构,元数据的大小与文件数据相比很小,所以不需要很高的传输带宽,所以用LAN网络传输。SAN共享文件系统上的元数据信息由元数据服务器统一管理。客户端在LAN网络下通过tcp/ip协议与元数据服务器相连并通讯。
[0004] SAN文件系统已广泛应用于广播电视节目的后期制作中,包括其中的一个重要应用场景:多个客户端可以同时对SAN共享文件系统中的文件进行存取操作,比如转码系统、打包系统。该系统是节目制作流程中的必经环节,同时也是计算高度密集型的应用,尤其面对当前的高清制作,需要耗费大量的计算时间,影响节目的制作效率。为此,利用分布式计算的分布式打包/转码技术应运而生,该技术使用SAN共享文件系统进行集群计算应用,与单机运算相比大幅缩短了运算时间。但该技术目前普遍存在一点不足,即集群计算结束后,每个客户端都会在共享存储上生成一个新的文件,这时需要在某个客户端上分别读取每个文件到客户端本地,然后在本地客户端对这些文件进行物理聚合,生成新的聚合大文件,最后把聚合生成的大文件再写到共享存储上,供其他客户端进行访问。这一使用分布式技术带来的额外的物理聚合的过程需要消耗很长的聚合时间,而且一旦进行集群计算的节点非常多,就会产生大量的待聚合的文件,从而进行聚合所耗费的时间也就越长。同时,如果在使用此种物理聚合方法,将会占用非常长的聚合时间,使得整个SAN网络运行变慢,长时间降低了元数据服务器对外提供服务的存储带宽。不仅如此,物理聚合需要对每个文件进行一次读操作,同时对新生成的物理聚合文件进行一次到共享存储(通常是磁盘阵列)的写操作,这些文件的读写操作也大量占用了磁盘阵列的输入输出能力和SAN网络的传输带宽。

发明内容

[0005] 克服现有技术的问题,本发明的目的是提出一种共享文件系统多文件快速聚合和读取的方法。所述的方法是在集群计算结束后,通过特定的聚合方法将多个客户端产生的文件在短时间内快速聚合成一个大文件或将多个文件快速追加聚合到已存在大文件后面,在聚合过程中不产生文件实际内容的拷贝工作,同时对客户端而言,此快速聚合的文件和使用物理聚合方法后生成的文件在读取和写入时的操作完全相同,大大缩短了文件聚合占用的时间。
[0006] 本发明的目的是这样实现的:
[0007] 一种共享文件系统多文件快速聚合方法,所述的方法中所使用的硬件系统包括:多个客户端通过传输大体积文件的高速网络与元数据服务器和磁盘列阵连接,所述的多个客户端同时还通过传输元数据和控制及交互信息的网络与元数据服务器连接,所述方法的步骤如下:
[0008] 生成子文件的步骤:多个客户端按照预设的聚合规则分别执行同一处理任务的不同部分,每部分生成为一个独立的子文件;
[0009] 多文件快速聚合的步骤:共享文件系统对需要聚合的的多个子文件进行有效检查并快速的进行“逻辑聚合”,把多个子文件快速聚合或快速追加聚合成一个聚合大文件。
[0010] 进一步的,上述的“多文件快速聚合的步骤”包括以下子步骤:
[0011] 检测聚合子文件有效性的子步骤:文件系统在进行文件快速聚合时检测所有需要聚合的子文件有效性以及是否满足聚合规则,如果“否”则退出多文件快速聚合步骤,如果“是”则进入下一子步骤;
[0012] 检测聚合是否为追加聚合的子步骤:文件系统在进行文件快速聚合时检测聚合是否是在原来聚合文件的基础上进行追加聚合,如果为追加聚合需要检测已存在聚合文件是否满足追加聚合规则,如果是追加聚合且满足追加聚合规则进入建立聚合文件与聚合子文件映射关系的子步骤,否则如果是追加聚合但不满足追加聚合规则就退出多文件快速聚合步骤;如果不是追加聚合则进入下一子步骤;
[0013] 创建聚合文件的子步骤:根据客户端请求的聚合文件信息和各子文件属性信息创建聚合文件,并计算聚合文件的相关属性信息;
[0014] 建立聚合文件与聚合子文件映射关系的子步骤:根据需要聚合的每个子文件相关属性信息,更新聚合文件的相关属性信息,建立聚合文件和每个子文件的映射关系。
[0015] 进一步的,上述的多文件快速聚合的步骤还包括处理聚合子文件的子步骤:聚合完成后,对聚合子文件进行处理,使客户端不再查看到聚合子文件信息。
[0016] 进一步的,上述的“生成子文件的步骤”包括如下子步骤:
[0017] 处理任务分配的子步骤:将同一处理任务根据聚合规则的的要求拆分成多个子处理任务,将子任务分派给不同的客户端执行;
[0018] 计算子文件的子步骤:多个客户端对分配的子处理任务执行分布式计算,生成各自对应的子文件;在子文件的封装过程中如果子文件长度不是文件系统块大小的整数倍,必要时对不足位补空白数据。
[0019] 进一步的,上述共享文件系统中实现多文件快速聚合的方法,所述的聚合规则包括子文件的大小为文件系统块的整数倍;
[0020] 进一步的,上述共享文件系统中实现多文件快速聚合的方法,所述的计算包括编码格式转换和/或渲染合成;
[0021] 进一步的,上述共享文件系统中实现多文件快速聚合的方法,所述的分别生成的方式为使用分布式计算的方式生成;
[0022] 进一步的,上述共享文件系统中实现多文件快速聚合的方法,如果处理任务是转码任务或者打包任务,生成的目标文件的视频压缩编码选用固定码率的编码方式;
[0023] 一种述共享文件系统多文件快速聚合文件的读取方法,该方法的步骤包括:
[0024] 打开文件的步骤:用于客户端向元数据服务器发出请求,要求打开磁盘阵列中待读取的文件;
[0025] 处理元数据的步骤:客户端根据待读取文件的内容,向元数据服务器申请获取待读取文件所对应的元数据,客户端获取相应元数据,同时客户端接受分配给自己的机会锁;
[0026] 读取文件的步骤:客户端获取元数据段,并根据所获得的元数据段,对磁盘阵列发起读取文件的块数据请求,以完成该元数据段对应块数据读取操作,循环的申请元数据段和读取元数据段对应的块数据,直至完成所需数据的读取;
[0027] 文件关闭的步骤:客户端向元数据服务器发出要求,关闭已打开的读取文件句柄,完成本次文件读取。
[0028] 进一步的,上述的“处理元数据的步骤”中元数据服务器在正常处理客户端请求待操作文件的元数据外还需要另外检测获取元数据的文件是否为聚合文件,包括以下子步骤:
[0029] 开辟存储空间的子步骤:用于客户端在本地内存或硬盘中开辟用于存储元数据的存储空间;
[0030] 选择处理的子步骤:用于客户端对元数据申请请求选择是放在后台队列等待还是实时处理,如果是后台等待则将元数据申请请求放入元数据请求队列中等待,如果是实时处理则进入下一子步骤;
[0031] 检测获取元数据的文件是否聚合文件的子步骤:用于元数据服务器检测客户端发起获取元数据请求的文件是否为聚合文件,如果“否”则进入“获取元数据的子步骤”,如果“是”则进入下一子步骤;
[0032] 获取聚合文件与聚合子文件映射关系子步骤:根据客户端请求的聚合文件的元数据信息,获取与之相对应聚合子文件的映射关系;
[0033] 获取元数据的子步骤:根据请求获取相对应文件的元数据返回给客户端。
[0034] 本发明产生的有益效果是:本发明所述的方法,在进行集群计算时,通过特定的快速聚合方法可以将多个客户端产生的文件在短时间内快速聚合成一个大文件或将多个文件快速追加聚合到已存在大文件后面,在聚合过程中不会产生文件拷贝工作,同时对客户端而言,此快速聚合的文件和使用物理聚合方法后的文件完全相同。本发明有效地缩短了共享文件系统应用到计算时多个文件的聚合时间,而且聚合文件数量越多,效果越加明显,对于常见的视音频处理中的转码或者打包合成处理,在很大程度上提高了分布式转码/打包的效率。同时也提高了集群计算速度,降低了数据存储带宽。由于在广播电视行业的应用中,会频繁的使用分布式转码/分布式打包的操作,本发明通过进一步提高分布式打包/转码的效率,带来了电视节目整体制作流程上的效率提升,尤其是对目前的高清节目制作意义尤其重大。使得分布式转码或者打包合成在各子任务完成后,不必等待漫长的文件物理合并操作,而是直接几乎是瞬间完成逻辑合并,并将逻辑合并后的文件提交后续的审片或者播出使用,满足了现代传媒机构第一时间传递信息的需求。

附图说明

[0035] 下面结合附图和实施例对本发明作进一步说明。
[0036] 图1是发明实施例一所述共享文件系统文件快速聚合方法所使用的硬件系统的示意图;
[0037] 图2是发明实施例一所述共享文件系统文件快速聚合方法的流程图。
[0038] 图3是发明实施例一所述的读取聚合文件方法的流程图。
[0039] 图4是发明实施例一所述的处理元数据步骤的流程示意图。

具体实施方式

[0040] 实施例一:
[0041] 本实施例是一种共享文件系统多文件快速聚合以及读取该聚合文件的方法。所述的方法所使用的硬件系统包括:多个客户端(图1中只画出了3个客户端,在实际中可以有更多的客户端)通过传输视频文件的SAN网络(图1中粗实线和双线表示)与元数据服务器和磁盘列阵连接,所述的多个客户端通过传输元数据的LAN网络(图1中用细实线表示)与元数据服务器连接,如图1所示。
[0042] 其中客户端可以是普通的PC机工作站,也可以是服务器,具有连接SAN网络的能力,并可以处理大型的文件,例如高清晰度视频文件。本实施例所述的SAN网络是由光纤交换机和光缆组成的光纤网,是带宽超过1G的宽带网络,可以传输高清晰度的视频文件,也可以用千M或万M的高速以太网构成SAN网络。本实施例所述的LAN网络是由以太交换机组成并使用TCP/IP为通讯协议的以太网,具有数百M的带宽,可以快速的传输元数据文件和控制及任务交互信息。在通常情况下为了避免元数据服务器出现问题而影响整个SAN系统的正常运行,可增加一台备用的元数据服务器,即两台元数据服务器,使其互为备份,在同步数据的基础上实现元数据服务器冗余。系统中的共享存储设备通常使用磁盘阵列,磁盘阵列通过SAN网络与客户端与元数据服务器相连,客户端和元数据服务器可以通过fc协议或iscsi协议对其进行访问。
[0043] 本实施例的基本思路是:在进行分布式计算时,多个客户端按照预设的聚合规则生成多个文件,之后通过特定的快速聚合方法将多个客户端产生的文件在短时间内快速聚合成一个大文件或将多个文件快速追加聚合到已存在大文件后面,在聚合过程中不产生文件拷贝工作,同时对客户端而言,此快速聚合生成的文件和使用物理聚合方法后生成的文件完全相同。特别适合于分布式转码、打包的大数据量内容经过分布式计算生成并合并为一个文件后,供多客户端共享访问的情形。本实施例所述方法可表述为:多个客户端服务器在进行集群计算后,会在共享存储内生成多个文件,分别为file1,file2,file3,…,fileN,大小分别为M1,M2,M3,…,MN,通过SAN文件系统使用特定的聚合方法将多个文件file1,file2,file3,…,fileN在短时间内快速聚合成一个新的大文件,名称为mergefile,文件大小为M1+M2+M3+…+MN,是被聚合的多个文件的大小之和,同时,快速聚合生成的文件与使用物理聚合方法后生成的文件包括文件大小及其他属性完全相同。这样,就大大降低了聚合多个文件使用的时间,同时也降低存储的带宽使用率。在通常的SAN系统中多个文件使用物理聚合方法过程中,需要在一个客户端内分别读取文件file1,file2,file3,…,fileN到客户端本地,然后在本地对file1,file2,file3,…,fileN进行物理聚合,生成文件mergefile,最后把聚合生成的文件mergefile再写到共享存储上,供其他客户端进行访问。而本实施例则在共享存储上对多个文件file1,file2,file3,…,fileN进行“逻辑聚合”,在“逻辑聚合”过程中,所有文件始终存在于共享存储中,不会对文件进行拷贝和读取工作。以此可有效地缩短了SAN共享系统应用到集群计算时多个文件的聚合时间,而且聚合文件数量越多,优势越加明显。同时也提高了集群计算速度,降低了聚合过程中对磁盘阵列数据存储带宽的占用,同时降低了对SAN网络的传输带宽的占用,使得同样的磁盘阵列和SAN网络可以支持更多的客户端共享使用。最关键的是,由于逻辑聚合过程没有发生实际的文件拷贝,可以在瞬间完成,从而为电视节目快速审核播出节省了非常宝贵的时间,在高清节目文件体积巨大的情况下,这种后台技术处理占用时间的节省意义尤其重大。
[0044] 本实施例所述共享文件系统中实现多文件快速聚合方法的具体过程步骤如下:
[0045] 1、多个子文件生成的步骤:用于客户端将同一处理任务根据聚合规则的的要求拆分成多个子处理任务,将子任务分派给不同的客户端执行;多个客户端对分配的子处理任务执行分布式计算,生成各自对应的子文件;在子文件的封装过程中如果子文件长度不是文件系统块大小的整数倍,必要时对不足位补空白数据。生成的多个子文件通过SAN网络写入到共享存储上。具体实现上包括:
[0046] (1)、用于客户端将同一处理任务根据聚合规则的的要求拆分成多个子处理任务,将子任务分派给不同的客户端执行;通常情况下一个大的计算任务通过一台有管理权限的客户端分派成多个子任务,交给多台客户端同时并行计算完成,其中分配任务的过程,就需要预先根据局和规则的要求对计算任务进行拆分,以便各执行子计算任务的客户端最终生成的子文件满足快速聚合要求。举例来说,对于一个时间长度为2小时的节目进行转码,管理客户端根据目前空闲的客户端数量,把2个小时的节目的不同部分分派给不同的客户端同时执行转码计算,分别生成对应于不同部分的子文件。
[0047] 任务的拆分既要满足到各客户端执行计算的工作量大致相同,以便在最短的时间内同时完成转码任务,交给下一个工作环节使用;又要满足快速聚合时,除了最后一个子文件外,其余的子文件的大小必须是文件系统块大小的整数倍。通常情况下,对于转码的目标文件的视频编码为固定码率的压缩编码格式,比较容易确定每一段转码后的文件大小,从而拆分任务相对容易实现一些。对于有些视音频文件封装格式,允许在实际的每帧视音频数据末尾添加空白的填充数据,从而达到子文件大小为文件系统块大小的整数倍的要求。所以对于转码任务或者打包合成任务,如果希望最后使用快速文件聚合提高文件合并的效率,可以选择目标文件的视频编码为固定码率的压缩编码格式,视音频文件的封装格式为AVI或者MXF OP1A。。对于不允许在视音频数据中间添加空白填充数据的文件封装格式,需要管理客户端严格计算每一帧数据末尾的文件大小,找到恰好可以满足子文件大小为文件系统块大小的整数倍的入点和出点,从而形成子计算任务交给其他客户端执行。
[0048] 对于有N台可以执行子任务的客户端的情况下,既可以把计算任务分为N份, 每一台客户端执行其中一个计算任务,生成N个子文件进行快速合并,这种情况通常是所有客户端都完成计算任务时,由管理客户端向文件系统申请文件快速聚合;也可以生成远多于N的M个子任务,各客户端从前到后依次执行子任务,管理客户端随时监测子文件的生成情况,并随时向文件系统提交快速文件聚合请求。这种情况下往往是子文件的追加聚合,当全部子任务都执行完成时,最终的快速聚合文件才可以提交给下一个环节使用。
[0049] (2)、计算子文件的子步骤:多个客户端对分好段的内容执行分布式计算,编码格式采用固定码率的视频压缩编码方式,,生成文件过程中按照文件系统块大小的整数倍生成文件,不足位补空白数据。为了使得生成的子文件符合预设的大小,需要在编码的过程中确定生成数据的大小,如果正好满足生成的文件是文件系统块大小整数倍的要求就直接封装成文件;如果不满足,则在该数据后面补充空白数据来满足。由于计算任务拆分时已经考虑到了快速聚合规则的要求,客户端只需要执行子任务并在必要的时候补充空白数据即可生成满足需要的子文件。
[0050] 2.准备多文件快速聚合的步骤:用于提取各个准备聚合的子文件的信息。
[0051] 3、多文件快速聚合的步骤:用于文件系统对需要聚合的多个子文件进行有效检查并快速的进行“逻辑聚合”,把多个聚合子文件快速聚合或快速追加聚合成一个聚合大文件。
[0052] 本步骤与传统的物理聚合方法的差别在于:传统的物理聚合方法是通过拷贝方式完成,首先读取需要聚合的第一个文件,然后按照聚合顺序依次读取其他文件,直到把所有文件都聚合完成。而本步骤则不会使用拷贝方式,通过建立聚合文件与聚合子文件的映射关系进行快速的“逻辑聚合”。因此,本步骤所述的多文件快速聚合步骤包括以下子步骤:
[0053] (1)检测聚合子文件有效性的子步骤:用于文件系统在进行文件快速聚合时检测所有需要聚合的子文件有效性以及是否满足聚合规则,如果“否”则退出多文件快速聚合步骤,如果“是”则进入下一子步骤。
[0054] 本子步骤是一个判断的步骤,判断所有需要进行聚合的子文件是否有效以及是否符合聚合规则。对于所有需要聚合的子文件必须满足文件系统一些规则,也就是除最后一个聚合子文件,其他所有聚合子文件的大小都必须是文件系统块大小的整数倍,并且保证没有其他客户端操作这些子文件,这样才能保证聚合后的文件能够被客户端正确访问。由于使用的是“逻辑聚合”,聚合过程中,不会进行文件的位置改变和拷贝等工作,这就要求除了最后一个聚合子文件,其他聚合子文件的大小都必须满足是文件系统块大小的整数倍,否则聚合的文件会出现“空洞”,导致文件在读取过程会出现问题。因此,本步骤主要用于文件系统在进行文件快速聚合时检测所有需要聚合的子文件是否有效以及是否满足聚合规则,如果不满足聚合规则就要退出快速文件聚合步骤。
[0055] (2)检测聚合是否为追加聚合的子步骤:用于文件系统在进行文件快速聚合时检测聚合是否是在原来聚合文件的基础上进行追加聚合,如果为追加聚合需要检测已存在聚合文件是否满足追加聚合规则,如果是追加聚合且满足追加聚合规则就更新聚合文件的相关属性信息,进入建立聚合文件与聚合子文件映射关系的子步骤,否则退出多文件快速聚合;如果不是追加聚合则进入下一子步骤。
[0056] 在追加聚合过程中,必须确保已经存在聚合文件中的最后一个聚合子文件的大小必须满足是文件系统块大小的整数倍,否则追加聚合后的文件会出现“空洞”,导致文件在读取过程会出现问题。本子步骤是一个判断的步骤,判断所进行聚合是否为追加聚合,如果为追加聚合,则已存在的聚合大文件需要满足SAN文件系统一些规则,也就是已存在聚合文件中的最后一个聚合子文件大小必须是文件系统块大小的整数倍,这样才能保证其他聚合子文件追加聚合到的已存在聚合大文件上。满足以上条件,就可以正确的对所有需要聚合的文件进行聚合或追加聚合,否则就要退出多文件快速聚合。
[0057] (3)创建聚合文件的子步骤:根据客户端请求的聚合文件信息和各子文件属性信息创建聚合文件,并计算聚合文件的相关属性信息。这里的属性信息主要是指聚合文件的文件大小信息,通过计算各子文件大小之和可得。
[0058] (4)建立聚合文件与聚合子文件映射关系的子步骤:根据需要聚合的每个子文件相关属性信息,建立聚合文件和每个子文件的映射关系。
[0059] 本子步骤是多文件快速聚合的关键步骤,聚合文件是否能够正确访问取决于该子步骤。因为对聚合文件使用的“逻辑聚合”方式,实际上在文件系统中,每个子文件都是分散独立存在的,与其他子文件和聚合文件都是没有关系的。这样在访问聚合文件时,就必须通过某种方式把聚合文件和所有各子文件之间建立关系,才能正常的访问整个聚合文件。这里通过索引的方式为聚合文件和子文件建立映射关系,在索引文件内首先保存聚合文件的信息,包括聚合文件名称、大小以及聚合文件的个数,然后依次保存每个子文件的名称信息、该子文件在聚合文件中的偏移量以及该子文件的大小。这样,在访问聚合文件时,通过被访问的聚合文件偏移量就可以很快的准确定位到相应子文件,然后通过读取子文件相应信息完成对聚合文件的访问。
[0060] (5)处理聚合子文件的子步骤:聚合完成后,对聚合子文件进行处理,使客户端不再查看到聚合子文件信息。聚合完成后,对聚合过的子文件进行特殊标记处理,也就是在文件系统的元数据服务器端隐藏被聚合过的子文件,使得客户端不能对这些聚合过的子文件进行直接访问。
[0061] 本实施例还包括读取该聚合文件的方法,该方法包括如下步骤:
[0062] 1、打开文件的步骤:用于客户端向元数据服务器发出请求,要求打开磁盘阵列中待读取的文件。本步骤是基本步骤,当用户需要读取一个文件的时候,用户在客户端打开待操作文件的句柄,客户端根据该文件的句柄,向元数据服务器发出相关操作请求。
[0063] 2、元数据处理的步骤:客户端根据待读取文件的内容,向元数据服务器申请获取待操作文件所对应的元数据,客户端获取相应元数据信息,同时客户端接受分配给自己的机会锁。
[0064] 本步骤与传统SAN共享文件的获取元数据的差别在于:传统的SAN文件系统获取元数据方法根据客户端请求文件的内容直接获取该文件内容对应的元数据信息,而本步骤则在正常获取待操作文件的元数据之前还需要另外判断获取待操作的文件是否为聚合文件。因此,本步骤所述的客户端处理元数据包括以下子步骤:
[0065] (1)开辟存储空间的子步骤:用于客户端在本地内存或硬盘中开辟用于存储元数据的存储空间。一般情况双元数据服务器都出现故障的情况不是很多,根据需要可以在硬盘开辟存储空间。
[0066] (2)选择处理的子步骤:用于客户端对元数据申请请求选择是放在后台队列等待还是实时处理,如果是后台等待则将元数据申请请求放入元数据请求队列中等待,如果是实时处理则进入下一子步骤。处理文件的读写,在客户端可以同时进行多个,为了提高效率可以开辟多个文件读写线程,这样就会有多个线程的运行队列,需要处理是就可以从队列中取出,进行处理。如果是后台运行,将后面的步骤加入请求队列,交由先前创建的处理线程处理;如果不是后台运行,直接在本线程中处理。
[0067] (3)检测获取元数据的文件是否聚合文件的子步骤:用于元数据服务器检测客户端发起获取元数据请求的文件是否为聚合文件,如果“否”则进入“获取元数据的子步骤”,如果“是”则进入下一子步骤。本子步骤是一个检测并判断的步骤,判断客户端请求元数据的文件是否为聚合文件,如果请求的为聚合文件的元数据信息,则需要根据聚合文件和聚合子文件映射关系获取相应子文件元数据信息,这种情况下可以进入下一子步骤:如果请求的为非聚合文件的元数据信息,则根据请求直接获取相应元数据信息,进获取元数据的子步骤。
[0068] (4)获取聚合文件与聚合子文件映射关系子步骤:根据客户端请求的聚合文件的元数据,获取与之相对应聚合子文件的映射关系。
[0069] (5)获取元数据的子步骤:用于元数据服务器根据通讯规则获取相应操作文件的元数据,并把元数据信息返回给客户端。获取一个聚合文件元数据与获取普通文件的元数据过程是一样的,只是在获取聚合文件元数据时需要先判断该元数据信息所对应的子文件,然后获取该子文件相应的元数据信息返回给客户端,如此循环直到将所需数据的元数据信息获取完毕。至本子步骤,整个“处理元数据的步骤”结束。
[0070] 3、读取文件的步骤:用于客户端获取元数据段,并根据所获得的元数据段,对磁盘阵列发起读取文件的块数据请求,以完成该元数据段对应块数据读取操作,循环的申请元数据段和读取元数据段对应的块数据,直至完成所需数据的读取。
[0071] 4、关闭文件的步骤:用于客户端向元数据服务器发出要求,关闭已打开的操作文件句柄,完成本次文件读取。
[0072] 最后应说明的是,以上仅用以说明本发明的技术方案而非限制,尽管参照较佳布置方案对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案(比如获取元数据的方式、文件的读取方式、步骤的先后顺序等)进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。本发明所述的方法可编制为应用于计算机系统的程序,并运行于本发明所述的计算机网络系统中。