一种基于Hadoop的海量可归类小文件关联存储方法

文档序号:6435595阅读:144来源:国知局
专利名称:一种基于Hadoop的海量可归类小文件关联存储方法
技术领域
本发明涉及海量可归类小文件在Hadoop (分布式文件系统)上的存储及读取优化方法,Hadoop是当前主流的云存储平台,它由一个NameNode和多个DataNode组成,其中 NameNode负责管理文件系统名称空间和控制外部客户端的访问,DataNode负责存储数据, 主要解决现有大规模可归类小文件存储及读取效率较低的问题。
背景技术
随着互联网的发展,需要存储的数据量日益庞大;而文件大小差异很大,从数千字节的小文件到数百兆字节的大文件。Hadoop分布式文件系统适合存储大文件,在存储小文件时其存储性能和读取性能严重下降。因此,如何有效地存储和管理大量的小文件,成为亟待解决的难题。针对如何有效地在分布式文件系统上存储海量的小文件、降低其读取延迟, 申请人:通过查新,得到3篇与本发明相关密切的专利,它们分别是1. 一种集群存储中并行访问大量小文件的方法及系统(专利号 CN201010178387. 1);2. 一种机群文件系统中的小文件存储和访问方法(专利号CN201010208495. 9 ;)3.大批量文件数据存放和读取方法(专利号CN200710199002. 8)。专利1提出了一种集群存储中并行访问大量小文件的方法及系统,该方法包括 对写入的小文件进行缓冲;将缓冲的多个小文件合并为一个临时文件;将所述临时文件的元数据和数据对象存储至元数据服务器节点和数据服务器节点的后端存储中,从而可以有效地提高集群文件系统服务的响应时间和速度,提升数据整体的单位时间数据读写次数、 吞吐量。专利2提出了一种机群文件系统中的小文件存储和访问方法。该方法有三大步骤(1)设置阈值,区分大小文件;( 在元数据服务器上,存储小文件的数据;C3)在元数据服务器上,进行小文件创建、读写和删除。由于该发明把小文件的数据存储在元数据服务器上,这样对于小文件的IO访问操作,如创建、读写和删除等,发起IO访问的客户端只需要与元数据服务器交互,无需与数据服务器交互,减少了小文件访问的网络延迟,提高了小文件IO的性能,从而从整体上提高了机群文件系统的IO性能。专利3提出了一种大批量文件数据存取方法,包括将所有小文件的数据合并成一个大文件;建立每个小文件的文件名及其文件编号的一一对应关系;建立每个所述文件编号与小文件的文件信息的对应关系,所述文件信息包括所述小文件在所述大文件中的位置。相应地,该发明还公开一种大批量文件数据读取方法,用于读取按照本发明的存放方法存放的文件数据,包括步骤根据小文件的文件名来获得所述小文件的文件编号;根据所述文件编号获得所述小文件的文件信息;根据所述文件信息获得所述小文件在大文件中的位置;根据所述小文件在大文件中的位置,通过所述大文件的IO接口实现对所述小文件数据的读取。上述现有解决小文件存储问题的专利技术方案存在以下问题
1.已有小文件存储效率的研究主要集中在非云存储的文件系统上,而不是针对云存储环境下的分布式文件系统,即Hadoop分布式文件系统上的存储优化方法;2.现有专利虽然提出了合并小文件的方法,但在合并时没有考虑文件之间的关联关系。

发明内容
本发明的目的在于解决现有Hadoop分布式文件系统对大规模可归类小文件存储和读取效率低下的问题,根据可归类小文件特征,提出一种Hadoop分布式文件系统上可归类小文件的存储优化方法。为达到以上目的,本发明是采取如下技术方案予以实现的一种基于Hadoop的海量可归类小文件关联存储方法,包括NameNode端全局索引管理技术和文件聚合技术。上述技术特征在于(1)将属于某一类别的小文件聚合成一个文件,称之为逻辑单元;(2)对每一个小文件建立存放在Hadoop文件系统的NameNode内存中的全局索引。文件聚合技术用于提高可归类小文件存储效率,NameNode端全局索引管理技术用于管理聚合后的小文件。所说的NameNode端全局索引管理技术包括全局索引文件加载在NameNode的内存中,扩展了 NameNode的元数据结构,包括小文件索引集合和碎片索引集合;(1)小文件索引集合采用二叉排序树结构,用来定位小文件,索引项包括文件名称 (16字节)、偏移G字节)、长度G字节)、局部序列号G字节),索引项按文件名排序,使用局部序列号记录文件聚合到逻辑单元的先后顺序,对小文件索引集合的操作主要有索引项的查找、插入和删除,这些操作与二叉排序树操作的相同;(2)碎片索引集合采用二叉排序树结构,用来定位碎片。索引项包括偏移G字节) 和长度G字节),索引项按碎片长度排序,对碎片索引集合的操作主要有索引项的查找、插入和删除,这些操作与二叉排序树的操作相同;(a)当写入小文件时,对小文件索引集合和碎片索引集合的操作如下Step 1 对小文件索引集合,使用待写入小文件的文件名查找索引项,判断是否有重名文件存在,如果有重名文件,则返回写入失败,如果没有重名文件,则执行Mep 2 ;Step 2 对碎片索引集合,使用待写入小文件的长度查找索引项,判断是否有合适的碎片供存放写入文件;Step 2. 1 如果有,则将该碎片分为两个部分,前一部分分配给待写入小文件,后一部分碎片作为新的碎片,在碎片索引集合,删除原碎片的索引项,为新的碎片插入索引项,在小文件索引集合中插入新写入小文件的索引项;Step 2. 2 如果没有,对碎片索引集合不进行任何改动,直接在数据块末尾的空白区分配空间给小文件存储,并在小文件索引集合插入其索引项。(b)当删除小文件时,对小文件索引集合和碎片索引集合的操作如下Stepl 对小文件索引集合,使用待删除小文件的文件名查找索引项,判断是否存在该文件,若不存在则删除失败,如果存在,则执行Mep 2 ;在小文件索引集合中,删除该文件的索引项,在碎片索引集合,插入一条新的碎片索引项;在碎片索引集合,判断新的碎片索引项其相邻的数据单元是否同样是碎片数据,如果存在任何一边的数据单元是空白索引,那么合并多个数据碎片成一个大的数据碎片,并更新碎片索引,当数据碎片的相邻碎片是由于数据块的分界造成时,不需要进行数据碎片的合并。所说的文件聚合技术包括对可归类小文件采用动态聚合策略,将小文件聚合到其属于的逻辑单元,根据写请求中的逻辑单元名,NameNode判断该文件属于哪个逻辑单元,如果属于某逻辑单元,则将其聚合到该逻辑单元,如果无法判断文件属于哪个逻辑单元,则将其聚合到待定单元中,根据文件库的规模,设定Nte个待定单元,用Nuf表示未找到逻辑单元的小文件的总数,Naf表示已经聚合到逻辑单元的总数,N1表示逻辑单元的总数,则Ntc = -* Ni* μ
Naf其中μ <1,是待定因子。小文件具体聚合到哪个待定单元,可采取不同的策略, 如采取轮询方式或通过Hash值分配方式,之后再根据文件的访问局部性,将待定单元中的文件归类到逻辑单元中;聚合文件时采用碎片再分配策略,当小文件(记作聚合到逻辑单元时,检查碎片并将Fni填充到碎片,NameNode首先读取逻辑单元的碎片索引集合,查询是否有合适的碎片供填充,如果有合适的碎片,则将插入到该碎片中,导致碎片的分裂和碎片索引项的更改,具体有以下三种情况(a)如果有碎片的长度大于Fni的长度,那么选中超过!^长度的所有碎片中长度最小的碎片(记作Fft),将Fft分裂成两部分,前部分分配给F ,后部分仍作为碎片,在小文件索引集合插入的索引项,其中Frq. Offset = Ffr. OffsetFrq. Length = Size of (Frq)其中,SizeOf(Frq)代表 Frq 的长度,在碎片索引集合中,修改FftW索引项,其中Ffr. Offset = Ffr. Offset+Size of (Frq)Ffr. Length = Ffr. Length-Size of (Frq)(b)如果所有碎片的长度都小于Fni的长度,则将数据块的新空间分配给Fni,碎片索引集合无改变;(c)如果有碎片的长度等于的长度,那么就选中该碎片(记作FfJ,将Fto全部分配给F ,小文件索引集合插入!^的索引项,其中Frq. Offset = Ffre. OffsetFrq. Length = Size of (Frq)。与现有技术相比,本发明方法的优点是,本发明在考虑文件关联关系的基础上,提出文件归并方法,将属于某一类别的小文件聚合。针对属于某一类别的独立的小文件进行文件聚合和全局索引管理,大幅度提高了内存利用率,提高单位内存支持的最大文件数量。 本发明适用于通用场景下可归类小文件的存储和管理。


图1是本发明可归类小文件关联存储方法的聚合技术示意图。图2是本发明消息格式图。图3是本发明小文件上传活动交互图。图4是本发明小文件下载活动图。
具体实施例方式一种基于Hadoop的海量可归类小文件关联存储方法,包括用于管理聚合后的小文件的NameNode端全局索引管理技术和用于提高可归类小文件存储效率的文件聚合技术。我们可以将属于某一类别的小文件称为可归类小文件,属于某一类别的小文件聚合成一个文件后,称之为逻辑单元;对每一个小文件建立存放在Hadoop文件系统的NameNode内存中的全局索引。NameNode端全局索引管理技术包括全局索引文件加载在NameNode的内存中,扩展了 NameNode的元数据结构,包括小文件索引集合和碎片索引集合;(1)小文件索引集合采用二叉排序树结构,用来定位小文件,索引项包括文件名称 (16字节)、偏移G字节)、长度G字节)、局部序列号G字节),索引项按文件名排序,使用局部序列号记录文件聚合到逻辑单元的先后顺序,对小文件索引集合的操作主要有索引项的查找、插入和删除,这些操作与二叉排序树操作的相同;(2)碎片索引集合采用二叉排序树结构,用来定位碎片。索引项包括偏移G字节) 和长度G字节),索引项按碎片长度排序,对碎片索引集合的操作主要有索引项的查找、插入和删除,这些操作与二叉排序树的操作相同;(a)当写入小文件时,对小文件索引集合和碎片索引集合的操作如下Step 1 对小文件索引集合,使用待写入小文件的文件名查找索引项,判断是否有重名文件存在,如果有重名文件,则返回写入失败,如果没有重名文件,则执行Mep 2 ;Step 2 对碎片索引集合,使用待写入小文件的长度查找索引项,判断是否有合适的碎片供存放写入文件;Step 2. 1 如果有,则将该碎片分为两个部分,前一部分分配给待写入小文件,后一部分碎片作为新的碎片,在碎片索引集合,删除原碎片的索引项,为新的碎片插入索引项,在小文件索引集合中插入新写入小文件的索引项;Step 2. 2 如果没有,对碎片索引集合不进行任何改动,直接在数据块末尾的空白区分配空间给小文件存储,并在小文件索引集合插入其索引项。(b)当删除小文件时,对小文件索引集合和碎片索引集合的操作如下Stepl 对小文件索引集合,使用待删除小文件的文件名查找索引项,判断是否存在该文件,若不存在则删除失败,如果存在,则执行Mep 2 ;在小文件索引集合中,删除该文件的索引项,在碎片索引集合,插入一条新的碎片索引项;在碎片索引集合,判断新的碎片索引项其相邻的数据单元是否同样是碎片数据,如果存在任何一边的数据单元是空白索引,那么合并多个数据碎片成一个大的数据碎片,并更新碎片索引,当数据碎片的相邻碎片是由于数据块的分界造成时,不需要进行数据碎片的合并。所说的文件聚合技术包括对可归类小文件采用动态聚合策略,将小文件聚合到其属于的逻辑单元,根据写请求中的逻辑单元名,NameNode判断该文件属于哪个逻辑单元,如果属于某逻辑单元,则将其聚合到该逻辑单元,如果无法判断文件属于哪个逻辑单元,则将其聚合到待定单元中,根据文件库的规模,设定Nte个待定单元,用Nuf表示未找到逻辑单元的小文件的总数,Naf表示已经聚合到逻辑单元的总数,N1表示逻辑单元的总数,则Ntc = -* Ni* μ
Naf其中μ <1,是待定因子。小文件具体聚合到哪个待定单元,可采取不同的策略, 如采取轮询方式或通过Hash值分配方式,之后再根据文件的访问局部性,将待定单元中的文件归类到逻辑单元中;聚合文件时采用碎片再分配策略,当小文件(记作聚合到逻辑单元时,检查碎片并将Fni填充到碎片,NameNode首先读取逻辑单元的碎片索引集合,查询是否有合适的碎片供填充,如果有合适的碎片,则将插入到该碎片中,导致碎片的分裂和碎片索引项的更改,具体有以下三种情况(a)如果有碎片的长度大于Fni的长度,那么选中超过!^长度的所有碎片中长度最小的碎片(记作Fft),将Fft分裂成两部分,前部分分配给F ,后部分仍作为碎片,在小文件索引集合插入的索引项,其中Frq. Offset = Ffr. OffsetFrq. Length = Size of (Frq)其中,SizeOf(Frq)代表 Frq 的长度,在碎片索引集合中,修改FftW索引项,其中Ffr. Offset = Ffr. Offset+Size of (Frq)Ffr. Length = Ffr. Length-Size of (Frq)(b)如果所有碎片的长度都小于Fni的长度,则将数据块的新空间分配给Fni,碎片索引集合无改变;(c)如果有碎片的长度等于的长度,那么就选中该碎片(记作FfJ,将Fto全部分配给F ,小文件索引集合插入!^的索引项,其中Frq. Offset = Ffre. OffsetFrq. Length = Size of (Frq)。以下结合附图,对本发明中的一些具体内容作细致描述。如图1所示,本发明可归类小文件存储方案由上传模块、索引管理模块和下载模块组成。A.上传模块文件上传过程包括与NameNode交互和完成文件写入。在上传文件Fupl。ad时,如果指定了逻辑单元,则向NameNode发送格式一的请求消息。如果没有指定逻辑单元,则向NameNode发送格式二的请求消息,如图2所示,格式二消息仅包括小文件名和小文件的大小。在NameNode上,索引管理模块指定一个待定单元,返回待定单元的元数据和索引信息。客户端与NameNode交互活动流程如图3所示,具体过程如下1)如果指定逻辑单元名,则向NameNode发送格式一消息,否则发送格式二的请求消息。WNameNode查询逻辑单元的元数据和索引信息。如果查询不到逻辑单元的元数据,那么Fupl。ad即该逻辑单元的第一个文件。NameNode为该逻辑单元分配一个数据块并建立元数据,然后为Fupl。ad建立索引起始位置是0,长度是Fupl。ad的长度,将元数据和索引信息返回给客户端。执行步骤6)。3)如果查询到逻辑单元的元数据,则查询其的索引信息。根据索引信息,判断是否已有空白文件。如果已有空白文件,则检查是否有空白文件的长度大于或者等于上传文件。 如果有空白文件(记作I7blaJ,建立Fblank的索引信息起始位置为Fblank的起始位置,长度为Fupl。ad的大小;修改Fblank的索引起始位置为Fblank的原起始位置加Fupl。ad的大小,长度为 Fblank原大小减去Fupl。ad的大小。NameNode将元数据和Fupl。ad的索引信息返回给客户端(写入到数据块,按照上述索引信息,将Fupl。ad添加入Fblank)。执行步骤6)。4)如果没有空白文件,或者没有空白文件的长度大于或者等于新文件,则查找该逻辑单元下所有小文件中起始位置最大的文件,记作Flast。计算Flast的结束位置与Fupl。ad的大小之和,检查该和是否超过Hadoop文件系统的块长。如果不超过块长,则为Fupl。ad建立索引起始位置是Flast的结束位置,长度是Fupl。ad的大小。将元数据和Fupl。ad的索引信息返回给客户端。执行步骤6)。5)如果Flast的结束位置与Fupl。ad的大小之和超过块长,则在这个块的末尾,建立空白文件。空白文件的索引信息为起始位置为Flast的结束位置,长度是块长减去起始位置; 然后,NameNode为该逻辑单元分配一个新的数据块,并加入到元数据中。为Fupl。ad建立索引信息起始位置是新数据块的起始位置,长度是Fupl。ad的大小。最后将元数据和Fupl。ad的索引返回给客户端。6)向客户端发送应答消息。客户端接收应答,并准备写入数据到DataNode。7)完成文件写入DataNode。B.索引管理模块启动NameNode以后,索引管理机制被激活,处于监听状态的索引管理机制,对小文件进行查找、插入和删除操作。NameNode端的索引管理模块主要完成文件索引和碎片索引集合的管理。向客户端提供索引分配、索引删除和索引查询服务。1)当小文件请求聚合到逻辑单元时,索引管理模块提供索引分配服务。Step 1 对碎片索引集合,使用待写入小文件的长度查找索引项;Step 2 如果存在碎片长度大于待写入的小文件长度,则取长度大于该小文件的所有碎片中最短的碎片,将该碎片分为两个部分,前一部分索引分配给待写入小文件,后一部分碎片作为新的碎片,在碎片索引集合,删除原碎片的索引项,为新的碎片插入索引项, 在小文件索引集合中插入新写入小文件的索引项;Step 3 如果没有,对碎片索引集合不进行任何改动,直接在数据块末尾的空白区分配空间给小文件存储,并在小文件索引集合插入其索引项.2)当小文件请求删除时,索引管理模块在文件索引中删除文件索引项,并在碎片索引集合总插入碎片索引项。返回操作成功与否。Stepl 对小文件索引集合,使用待删除小文件的文件名查找索引项,判断是否存在该文件,若不存在则删除失败,如果存在,则执行Mep 2 ;在小文件索引集合中,删除该文件的索引项,在碎片索引集合,插入一条新的碎片索引项;在碎片索引集合,判断新的碎片索引项其相邻的数据单元是否同样是碎片数据,如果存在任何一边的数据单元是空白索引,那么合并多个数据碎片成一个大的数据碎片,并更新碎片索引,当数据碎片的相邻碎片是由于数据块的分界造成时,不需要进行数据碎片的合并。3)当小文件读取时,索引管理模块根据小文件名在文件索引集合中查找文件索引项,并返回文件索引项。当小文件预取时,根据逻辑单元名,返回对应的文件索引集合给客户端。C.下载模块可归类小文件存储方案的下载包括逻辑单元的元数据获取、文件索引查询、实体文件的读取。下载活动流程如图4所示,具体过程如下1)经过映射后,下载模块接收到可归类小文件的读取请求,记作Fraiuesttl2)客户端向NameNode发送请求,NameNode根据逻辑单元名,查询逻辑单元的元数据和文件索引集合;然后根据小文件名,在该逻辑单元的文件索引集合中,查询该文件的索引信息;将元数据和索引信息返回给客户端。3)根据元数据和索引信息,客户端与相关的DataNode交互,待DataNode准备就绪后,取得相应的数据,返回给客户端。
权利要求
1. 一种基于Hadoop的海量可归类小文件关联存储方法,其特征在于,包括NameNode端全局索引管理方案和文件聚合方案该方法第一是将属于某一类别的小文件称为可归类小文件,当这些可归类小文件聚合成一个文件后,称之为逻辑单元;第二是对每一个小文件建立存放在Hadoop文件系统的NameNode内存中的全局索引;所述的NameNode端全局索引管理方案包括小文件索引集合和碎片索引集合;其中(1)小文件索引集合采用二叉排序树结构,用来定位小文件,索引项包括文件名称、偏移、长度、局部序列号,索引项按文件名排序,使用局部序列号记录文件聚合到逻辑单元的先后顺序,对小文件索引集合的操作为索引项的查找、插入和删除,这些操作与二叉排序树操作的相同;(2)碎片索引集合采用二叉排序树结构,用来定位碎片,索引项包括偏移和长度,索引项按碎片长度排序,对碎片索引集合的操作为索引项的查找、插入和删除,这些操作与二叉排序树的操作相同;所述文件聚合方案是对可归类小文件采用动态聚合策略,将小文件聚合到其属于的逻辑单元,根据写请求中的逻辑单元名,NameNode判断该文件属于哪个逻辑单元,如果属于某逻辑单元,则将其聚合到该逻辑单元,如果无法判断文件属于哪个逻辑单元,则将其聚合到待定单元中,根据文件库的规模,设定Nt。个待定单元,用Nuf表示未找到逻辑单元的小文件的总数,Naf表示已经聚合到逻辑单元的总数,N1表示逻辑单元的总数,则Ntc = —* Ni* μNaf其中μ <1,是待定因子;小文件具体聚合到哪个待定单元,采取轮询方式或通过Hash 值分配方式,之后再根据文件的访问局部性,将待定单元中的文件归类到逻辑单元中;聚合文件时采用碎片再分配策略,当记作Fni的小文件聚合到逻辑单元时,检查碎片并将Fni填充到碎片,NameNode首先读取逻辑单元的碎片索引集合,查询是否有合适的碎片供 Frq填充,如果有合适的碎片,则将Fni插入到该碎片中,导致碎片的分裂和碎片索引项的更改,具体有以下三种情况(a)如果有碎片的长度大于的长度,那么选中超过长度的所有碎片中长度最小的碎片,记作Fft,将Fft分裂成两部分,前部分分配给Fni,后部分仍作为碎片,在小文件索引集合插入!^的索引项,其中Frq. Offset = Ffr. OffsetFrq. Length = Size of (Frq)其中,Size Of(Frq)代表Frtl的长度,在碎片索引集合中,修改Fft的索引项,其中Ffr. Offset = Ffr. Offset+Size of (Frq)Ffr. Length = Ffr. Length-Size of (Frq)(b)如果所有碎片的长度都小于Fni的长度,则将数据块的新空间分配给Fni,碎片索引集合无改变;(c)如果有碎片的长度等于的长度,那么就选中该碎片,记作Ffre,将Fto全部分配给F ,小文件索引集合插入!^的索引项,其中Frq. Offset = Ffre. OffsetFrq. Length = Size of (Frq)。
2.如权利要求1所述的基于Hadoop的海量可归类小文件关联存储方法,其特征在于, 所述NameNode端的索引管理中(a)当小文件请求聚合到逻辑单元时,对小文件索引集合和碎片索引集合的操作如下Step 1 对小文件索引集合,使用待写入小文件的文件名查找索引项,判断是否有重名文件存在,如果有重名文件,则返回写入失败,如果没有重名文件,则执行Mep 2 ;Step 2 对碎片索引集合,使用待写入小文件的长度查找索引项,判断是否有合适的碎片供存放写入文件;Step 2. 1 如果有,则将该碎片分为两个部分,前一部分分配给待写入小文件,后一部分碎片作为新的碎片,在碎片索引集合,删除原碎片的索引项,为新的碎片插入索引项,在小文件索引集合中插入新写入小文件的索引项;Step 2. 2 如果没有,对碎片索引集合不进行任何改动,直接在数据块末尾的空白区分配空间给小文件存储,并在小文件索引集合插入其索引项;(b)当删除小文件时,对小文件索引集合和碎片索引集合的操作如下Stepl 对小文件索引集合,使用待删除小文件的文件名查找索引项,判断是否存在该文件,若不存在则删除失败,如果存在,则执行Mep 2 ;Step2 在小文件索引集合中,删除该文件的索引项,在碎片索引集合,插入一条新的碎片索引项;在碎片索引集合,判断新的碎片索引项其相邻的数据单元是否同样是碎片数据,如果存在任何一边的数据单元是空白索引,那么合并多个数据碎片成一个大的数据碎片,并更新碎片索引,当数据碎片的相邻碎片是由于数据块的分界造成时,不需要进行数据碎片的合并。
全文摘要
本发明公开了一种基于Hadoop的海量可归类小文件关联存储方法,主要解决可归类小文件的存取效率问题。本发明包括NameNode端全局索引管理技术和文件聚合技术。针对属于某一类别的独立的小文件进行文件聚合和全局索引管理,大幅度提高了内存利用率,提高单位内存支持的最大文件数量。本发明包括(1)将属于某一类别的小文件聚合成一个文件,称为逻辑单元;(2)对每一个小文件建立存放在NameNode内存中的全局索引。文件聚合技术用于提高可归类小文件的存储效率,NameNode端全局索引管理技术用于管理聚合后的小文件。通过以上技术,提高了海量可归类小文件的存储效率。本发明适用于通用场景下可归类小文件的存储和管理。
文档编号G06F17/30GK102332029SQ20111031269
公开日2012年1月25日 申请日期2011年10月15日 优先权日2011年10月15日
发明者刘均, 宋凯磊, 董博, 郑庆华, 马瑞 申请人:西安交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1