文件系统、文件存储方法、存储装置和计算机可读介质与流程

文档序号:18029248发布日期:2019-06-28 22:28阅读:164来源:国知局
文件系统、文件存储方法、存储装置和计算机可读介质与流程

本公开涉及计算机技术领域,更具体地,涉及文件系统、文件系统的文件存储方法、文件系统的文件存储装置和计算机可读介质。



背景技术:

随着大数据时代的来临,数据在以前所未有的方式爆炸增长,数据的异构性也越来越强,海量异构数据的存储和处理给我们带来了越来越大的挑战。分布式文件系统(hadoopdistributedfilesystem,hdfs)因为具有很好稳定性和高效性,被很多大型企业用来处理海量数据。

但是,它依然有着一些自身的局限性,其中小文件问题严重制约着hdfs的更进一步发展。

block是hdfs的最基本的存储单位,block的空间大小默认为64m(也可以设置成128m),在存储小文件(文件大小明显小于block的大小(默认64mb)的文件)的时候,小文件虽然不会占满块的全部物理存储空间,但也会占据一个block,该blokc在hdfs中会被表示为一个对象(object)存储在namenode的内存中,每一个对象要占用150字节的内存空间。如果存放1million的文件至少消耗300mb内存,如果要存放1billion的文件数目的话会超出硬件能力。

因此,存储的文件数目受限于namenode的内存大小,所以说hdfs并不适合大量小文件的存储。hdfs并不是为了有效的处理大量小文件而存在的,而是为了流式地访问大文件设计的,如果同时存入大量的小文件,则hdfs将花费大量时间来进行元数据的保存和备份,会给namenode的内存带来压力,并且文件处理的速度会大幅降低。



技术实现要素:

为了缓解了小文件问题带来的namenode的内存压力,同时提高了文件处理的速度,本公开的目的在于,提供文件系统、文件系统的文件存储方法、文件系统的文件存储装置和计算机可读介质。

本公开的一个方面提供一种文件系统,用block存储文件,使用至少两级文件索引,在至少两级文件索引中的第一级索引中保存有文件的类目与block信息的关系,在至少两级文件索引中的第一级索引以外的其他级索引中保存有block信息与文件的信息的关系。

根据本公开的实施例,文件是文件大小小于block的小文件。

根据本公开的实施例,block信息是block号,block号唯一表征block,文件的信息包括由其他级索引分配的文件号。

根据本公开的实施例,文件系统包括主节点和数据节点,第一级索引存储在主节点中,其他级索引存储在数据节点中。

根据本公开的实施例,文件系统是分布式文件系统。

本公开的另一个方面提供一种文件系统的文件存储方法,在文件系统中使用至少两级索引,在至少两级索引中的第一级索引中保存有要存储的文件的类目与文件系统的block信息的关系,文件系统的文件存储方法包括如下操作:根据文件中的类目信息来获取其所属的类目;将文件切分成多个片段,并使片段中包含文件的类目信息;根据类目信息查询并获得在第一级索引中与类目关联的block信息;在该block信息所对应的block没有剩余空间或剩余空间的大小小于片段的大小的情况下,在第一级索引中插入表征和文件的类目呈相同类目的续展类目与新的block信息的关系,在剩余空间的大小为片段的大小以上的情况下,将片段存储在该block;在至少两级索引中的第一级索引以外的其他级索引中保存block信息与文件的信息的关系。

根据本公开的实施例,在第一级索引中插入了表征续展类目与新的block信息的关系后存储文件的情况下,根据文件中的类目信息来获取其所属的类目;将文件切分成多个片段,并使片段中包含文件的类目信息;根据类目信息查询并获得在第一级索引中与类目关联的多个block信息;按照顺序查询多个block的剩余空间,在被查询的block没有剩余空间的情况下,查询下一个block的剩余空间,在被查询的block有剩余空间的情况下,查询其剩余空间是否为片段的大小以上,若该剩余空间为片段的大小以上,则将片段存储在该block中,若该剩余空间小于片段,则查询下一个block的剩余空间;在查询完多个block的剩余空间后确认这些block没有剩余空间或剩余空间小于片段时,在第一级索引中插入表征续展类目与新的block信息的关系。

根据本公开的实施例,在第一级索引中插入表征续展类目与新的block信息的关系后,重新对文件进行从类目获取起的处理。

根据本公开的实施例,将文件均匀切分成多个片段。

根据本公开的实施例,文件是文件大小小于block的小文件。

根据本公开的实施例,block信息是block号,该block号唯一表征block,文件的信息包括由其他级索引分配的文件号。

根据本公开的实施例,续展类目是类目与数字的组合,该数字是伴随第一级索引中插入续展类目而从1起逐次递增1的数字。

根据本公开的实施例,文件系统包括主节点和数据节点,第一级索引存储在主节点中,其他级索引存储在数据节点中。

根据本公开的实施例,文件系统是分布式文件系统。

根据本公开的实施例,根据类目信息查询并获得的block信息所对应的block是距请求文件的存储的请求点最近的数据节点中的block。

根据本公开的实施例,续展类目是类目与数字的组合,该数字是伴随第一级索引中插入续展类目而从1起逐次递增1的数字。

根据本公开的实施例,关于查询的顺序,首先是与类目对应的block,然后是与续展类目对应的block,在查询续展类目时,按照数字标记从1到大的顺序查询。

根据本公开的实施例,在根据类目信息而第一级索引中没有类目信息所对应的类目的情况下,在第一级索引中创建该类目与新的block的信息的关系。

根据本公开的实施例,在将片段存储到block的过程中,block不足以存储全部的片段的情况下,在第一级索引中插入表征续展类目与新的block信息的关系后,重新对文件进行从类目获取起的处理。

本公开的另一方面提供一种文件系统的文件存储装置,包括:一个或多个处理器;和用于存储一个或多个程序的存储装置,其中,当一个或多个程序被一个或多个处理器执行时,使得一个或多个处理器执行上述中任一项的文件系统的文件存储方法。

本公开的另一方面提供一种计算机可读介质,其上存储有计算机可执行的指令,该指令被处理器执行时使处理器执行上述中任一项的文件系统的文件存储方法。

根据本公开的实施例,可以至少部分地解决在hdfs中存入大量的小文件给namenode的内存带来压力、从而使文件处理速度大幅降低的问题,因此可以实现缓解小文件问题带来的namenode的内存压力、同时提高文件处理的速度的技术效果。

附图说明

图1是说明本公开的hdfs中的两级索引结构的图。

图2是说明本公开的hdfs的文件存储流程的流程图。

图3是说明本公开的hdfs的文件存储流程的流程图。

图4是说明block不足以存储全部片段的情况下的处理的流程图。

图5是说明本公开的文件存储装置的结构的图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、操作、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、操作、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

本公开的实施例提供一种hdfs中的小文件的处理策略。

在本公开的hdfs中,采用两级索引结构,图1是说明本公开的hdfs中的两级索引结构的图。

如图1所示那样,一级索引保存在namenode中,该索引保存的是block号与要存储的文件的类目的关系,也就是说在同一block中存储同一种类目的文件。block号是在同一数据节点中唯一表征该block的信息。

关于文件的类目,例如可以进行体育、军事、科技……这样的分类,但并不限于此,也可以进行其他的分类。

二级索引结构保存在datanode中,每个节点的datanode都有一份索引表,保存的是block号这样的block信息与文件号、文件名等文件信息的关系。

通过这样的两级索引结构,元数据信息将不再交给namenode的内存保管,namenode将只是保存类目索引,元数据保管在本地,例如namenode的服务器的硬盘中即可。

block的空间在hdfs中默认设定成64m,但也可以设定成128m。

当进行小文件存储时,首先根据文件中的类目信息来判断并获取该文件所属的类目。

然后,将该文件进行切分,将其均匀切分成多个片段。例如一个文件,存储入计算机后,它的二进制编码为0100111101001100,均匀的切分为2份就是01001111,01001100这里每一段就是一个“片段”。并且,使每个片段中带有该文件的类目信息。

其中,均匀的切分片段是为了实现多个节点datanode的均匀存储,因为片段是根据类目均匀分布在block中的,所以各个节点中相同block号的block剩余空间是相同的。

切分成片段后的数据文件依旧存储在block之中,对不同类目的文件指定存储该类目文件的block号,相同类目的文件在各个datanode中均有相同的block号,同一个文件经过片段切分后保存在各个datanode时有相同的文件号。

例如,一个文学类文件,被切分为多个片段,根据类目索引,这些片段应该被存放在blockl中,那么他在每个datanode中被存放的位置都是blockl。

关于切分的片段的大小和数量,不在本公开中进行限定,能根据文件本身和处理需要来决定。

然后,根据类目信息在一级索引中进行查询,查询并获得与该类目对应的block号。

然后,查询所有datanode当中距离请求存储文件的请求点最近datanode中的对应的block号的block是否还有剩余空间。选择最近的节点,能减少网络传输时间,加快请求返回时间。

在该block还有剩余空间并且该剩余空间为片段的大小以上的情况下,将该片段存储在该block中。由二级索引对存储的所述索引分配文件号,将包括文件号、文件名等的文件信息添加到blockindex中。

在该block没有剩余空间,或者在该block的剩余空间小于存储片段的大小的情况下,返回namenode的一级索引,在索引列表中插入一条续展类目与block号的对应关系。

所谓续展类目,例如是某类目与数字标号的组合,该数字是伴随一级索引中插入续展类目而从1起逐次递增1的数字。例如文件目录军事所对应的block空间已满时,返回一级索引,在namenode索引中插入blockm与军事x的这条记录,该m是block号,x是从1起逐次递增1的数字。

然后,重新对文件执行从类目判定起的处理。这时,由于是新插入索引的block,所以一定足够存储文件的片段。

顺带一提,为了防止一级索引列表的反复重新插入,造成namenode的负载压力,类目划分要尽量适中,既不造成block空间的浪费,又不造成namenode的压力。

在插入续展类目后存储文件片段的情况下,处理与未插入续展类目的情况大致相同,但由于存在还有剩余空间的block有多个的可能性,从而处理稍有不同。

当进行小文件存储时,首先根据文件中的类目信息来判断并获取该文件所属的类目。

然后,将该文件进行切分,将其均匀切分成多个片段。

然后,根据类目信息在一级索引中进行查询,查询并获得与该类目对应的block号,这时有可能与该类目和/或多个该类目的续展类目对应的多个block信息符合条件。

然后,对多个类目所对应的block的剩余空间进行查询,首先对该类目所对应的block的剩余空间进行查询,若空间已满,则跳过,继续查询续展类目所对应的block的剩余空间。

若该类目所对应的block的剩余空间未满,则判断其剩余空间是否为要存储的文件的片段的大小以上,若剩余空间小于片段的大小,则跳过,继续查询续展类目所对应的block的剩余空间。

在查询续展类目所对应的block的剩余空间时,按照数字标号从1到大的顺序进行,在查询到剩余空间为片段的大小以上的block时,将片段存储在该block中。由二级索引对存储的所述索引分配文件号,将包括文件号、文件名等的文件信息添加到blockindex中。

若查询完全部符合条件的block都没有剩余空间为片段的大小以上的block,则返回namenode,在namenode中的索引列表中插入一条新的续展类目与block号的对应关系。

然后,重新对文件执行从类目判定起的处理。这时,由于是新插入索引的block,所以一定足够存储文件的片段。

接下来,参考图2的流程图来说明本公开的hdfs的文件存储流程。图2是说明本公开的hdfs的文件存储流程的流程图。

开始处理后,在操作s101,输入要存储的文件。

在操作s102,根据文件中的类目信息来判断并获取文件的类目。

在操作s103,将文件切分成片段,并使每个文件的片段都带有文件的类目信息。

在操作s104,根据类目信息,在namenode中的一级索引中查询该类目所对应的block号。

在操作s105,查询该block号所对应的block是否还有剩余空间。若没有剩余空间,则前进到操作s109,若还有剩余空间,则前进到操作s106。

在操作s105的判断为“是”的情况下,即,该block还有剩余空间,在操作s106,判断该待存入的片段的剩余空间的大小是否为片段大小以上。若剩余空间为片段的大小以上,则前进到操作s107,若剩余空间小于片段的大小,则前进到操作s109。

在操作s107中,将文件的片段存储到该block中。

在操作s108中,由二级索引对该文件分配文件号,将包括文件号、文件名等的文件信息添加到blockindex中,结束处理。

若操作s105或操作s106的判断为“否”,即block没有剩余空间或剩余空间小于片段,则在操作s109,在nomenode的一级索引中插入新的block号与续展类目的关系。

然后,重新对文件进行从类目获取起的处理。

在namenode中的一级索引中已经插入了表征续展类目与新的block号的关系的情况下,如图3的流程图那样进行处理。图3是说明本公开的hdfs的文件存储流程的流程图。

在操作s201,输入要存储的文件。

在操作s200,根据文件中的类目信息来判断并获取文件的类目。

在操作s203,将文件切分成片段,并使每个文件的片段都带有文件的类目信息。

在操作s204,根据在namenode中的一级索引中查询该类目所对应的block号,在本流程的情况下,由于在一级索引中已经插入了表征续展类目与新的block号的关系,因此存在符合基于类目信息的条件的block号有多个的情况。

在操作s205,首先对该文件的类目所对应的block号的block的剩余空间进行查询,判断该block是否有剩余空间。若还有剩余空间,则前进到操作s206,若没有剩余空间,则前进到操作s209。

若操作s205的判断为“是”,即该类目所对应的block号的block还有剩余空间,则判断其剩余空间是否为片段的大小以上,若剩余空间为片段大小以上,则前进到操作s207,若剩余空间小于片段大小,则前进到操作s209。

若操作s206的判断为“是”,即类目所对应的block号的block还有剩余空间,则在操作s207,将文件的片段存储到该block中。

在操作s208中,由二级索引对该文件分配文件号,将包括文件号、文件名等的文件信息添加到blockindex中,结束处理。

若操作s205或操作ss206的判断为“否”,即文件类目所对应的block号的block没有剩余空间或剩余空间小于片段大小,则在操作s209,对续展类目所对应的block号的block查询剩余空间。若没有剩余空间,则前进到操作s213,若有剩余空间,则前进到操作s210。

若操作s209的判断为“是”,即续展类目所对应的block还有剩余空间,则在操作s210,判断剩余空间是否为片段大小以上。在剩余空间为片段大小以上的情况下,前进到操作s211,在剩余空间小于片段大小的情况下,前进到操作s213。

若操作s210的判断为“是”,即剩余空间为片段大小以上,则在操作s211,将文件的片段存储到该续展类目所对应的block号的block中。

在操作s212,由二级索引对存储的所述索引分配文件号,将包括文件号、文件名等的文件信息添加到blockindex中,结束处理。

在操作s213,在续展类目的数字标号+1,前进到操作s214。

在操作s214,对数字标号+1的续展类目所对应的block号的block查询剩余空间,在还有剩余空间的情况下,前进到操作s215,在没有剩余空间的情况下,前进到操作s216。

若操作s214的判断为“是”,即数字标号+1的续展类目所对应的block号的block还有剩余空间,则在操作s215,判断剩余空间的大小是否为片段大小以上。

在操作s214或操作s215的判断为“否”,即,数字标号+1的续展类目所对应的block号的block没有剩余空间,或剩余空间小于片段大小,则在操作s216,确定是不是所有的负荷条件的续展类目所对应的block号的block都没有剩余空间,或剩余空间小于片段大小。在对所有续展类目完成了查询的情况下,前进到操作s217,在没有完成全部查询的情况下,返回到操作s213,继续对下一个数字标号+1的续展类目所对应的block号的block查询剩余空间。

在操作s217,在nomenode的一级索引中插入新的block号与续展类目的关系,然后重新对文件执行从类目判定起的处理。

其中,关于操作s107、s207和s211的“将片段存储到该block中”,由于将文件切分成多个片段,将多个片段仍然存储在1个block中,因此这里应当理解成将全部的片段都存入到block中。

若已经存储了部分片段而使block的剩余空间不足以存储剩余的片段,就直接进入在nomenode的一级索引中插入新的block号与续展类目的关系,然后重新对文件执行从类目判定起的处理。

例如执行如图4那样的流程。

以上说明了本公开的hdfs的小文件存储方法。

根据本公开,能缓解小文件问题带来的namenode的内存压力,同时提高文件处理的速度。

但本公开并不限定于以上的实施方式。

例如在上述实施方式中,使用两级索引,但并不限于此,也可以根据不同的分层结构使用两级以上的索引。

例如在上述实施方式中,在第一级索引中插入表征所述续展类目与新的block信息的关系后,重新对文件进行从类目获取起的处理,但并不限于此,由于文件中包含了分类的信息,而续展类目信息的类目与原本的类目是实质相同的类目,因此也可以直接将文件存入新的block中。

本公开还能用其他方式实现,例如用软硬件结合的装置和记录介质实现。

例如在图5中说明了这样的装置的基本的结构。图5是说明本公开的文件存储装置的结构的图。

在图5中,文件存储装置100至少具备处理器110和存储器120,处理器110和存储器120连接。

在存储器120中存储计算机可执行的指令,在这些指令被处理器被执行时,处理器使文件存储装置100执行本公开的hdsf的文件存储方法。

另外文件存储装置100也可以还具备与处理器110连接的输入/输出装置130和存储介质121。

输入/输出装置130用来输入输出各种文件、数据、指令等,存储介质121存储处理执行过程中需要的数据、参数、处理的结果等。

根据这样的装置和记录介质,能实现与上述方法相同的功能效果。

需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。根据本公开的实施例,计算机可读介质可以包括上文描述的rom502和/或ram503和/或rom502和ram503以外的一个或多个存储器。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行:……。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

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