基于Hadoop分布式文件系统的小文件存储方法

文档序号:7799914阅读:848来源:国知局
基于Hadoop分布式文件系统的小文件存储方法
【专利摘要】本发明公开一种基于Hadoop分布式文件系统的小文件存储方法,实现步骤为:(1)新增两台服务器;(2)判断文件是否是小文件;(3)判断大文件请求状态;(4)判断小文件请求状态;(5)预处理写请求;(6)处理写请求;(7)检测缓存区;(8)预处理读请求;(9)处理读请求;(10)小文件分离;(11)建立预取记录;(12)更新预取记录。本发明相比现有技术存储海量小文件的方法,在保证系统通用性的同时,还具有读写性能效率高、缓解NameNode内存负担的优点,解决了海量小文件时NameNode内存占用率高、存储访问效率低的问题。本发明可用于分布式文件系统对海量小文件的存储和管理。
【专利说明】基于Hadoop分布式文件系统的小文件存储方法
【技术领域】
[0001]本发明属于计算机【技术领域】,更进一步涉及计算机分布式数据优化存储领域中的一种基于Hadoop分布式文件系统(Distributed File System DFS)的小文件存储方法。本发明应用独立于HDFS系统的小文件处理服务器对小文件进行合并、映射和预取等操作,可应用于高效率地存储访问海量小文件。
【背景技术】
[0002]Hadoop Distributed File System,简称HDFS,是一个分布式文件系统。目前,在以HDFS为代表的分布式文件存储【技术领域】中,广泛使用HDFS高效处理各类大文件,但是随着用户需求的改变,小文件数量日益增加,用户和Namenode的交互也越来越频繁。由于HDFS自身的主从式结构和元数据的存储方式导致其在处理海量小文件时NameNode内存占用率高、存储访问效率低、并发用户的访问时延长,这些问题已经成为制约HDFS整体性能的瓶颈。
[0003]浪潮电子信息产业股份有限公司申请的专利“一种HDFS针对小文件的改进方法”(专利申请号:201310494888.4,公布号CN103530387A),公开了一种HDFS针对小文件的改进方法。该方法的思路是将NameNode的部分权限下方DataNode节点上,让DataNode缓存部分小文件元数据信息,让DataNode处理绝大多数的小文件读写请求,最大限度的减轻NameNode的负担。该方法有效解决了 NameNode单点负载过重的问题,将小文件的压力分配到数据节点,但是仍然存在的不足是,该方法不适用于高效率地对小文件进行存储访问操作。
[0004]Dong B 等人发表的论文“A novel approach to improving the efficiencyof storing and accessing small files on Hadoop:a case study by PowerPointfiles,,(Proc.0f the7th Int.Conf.0n Services Computing.Piscatawayj NJj USA:1EEE, 2010:65-72.),提出了一种针对有效存储ppt、视频文件类型的小文件的解决方案。BlueSky存放的主要是PPT文件小文件和视频小文件,以HDFS作为其存放的载体。在用户存储文件时,系统相应的存储一些文件的快照,用户可以通过这些快照决定是否继续浏览文件。同时,当用户浏览PPT时,可能也会访问一些相关联的PPT和文件,因而文件的访问具有相关性和本地性。Dong等人针对Bluesky系统的特点,在论文中提出了如下观点:1)将属于同一课件的小文件合并成一个大文件,从而减轻NameNode的压力,提高小文件的存储效率;2)提出了一种two-level prefetching机制(索引文件预取和数据文件预取),当用户访问某个文件时,通过索引文件预取机制,把文件所在的Block对应的索引文件加载到内存中,这样,就省去了用户与NameNode交互步骤,提高了小文件的读取效率。同时,由于数据文件预取机制,将该文件所在课件中的所有文件也会被加载到内存中,从而提高用户访问其他文件的速度。BlueSky从系统层面解决了 HDFS的小文件问题,虽满足了低时延访问的需求,但是仍然存在的不足是,该方法只适用于BlueSky系统特点下来解决小文件问题,并没有形成一个比较通用的技术方案。
【发明内容】

[0005]本发明的目的在于克服上述现有技术的不足,提出一种基于Hadoop分布式文件系统的小文件存储方法。该方法可以有效地克服HDFS在存储访问海量小文件时名字节点NameNode内存占用率高、存储访问效率低的缺点,并且保证了方法的通用性。
[0006]本发明实现的思路是在原HDFS架构之外增加了一个独立的小文件服务器,这个服务器通过建立相应的本地索引和小文件处理机制,来有效地完成小文件的合并、映射、预取,在写入或读取文件之前,先判断该文件是否是小文件,如果是,则先交给小文件服务器处理,否则直接交给原HDFS系统处理。达到减轻名字节点NameNode的负担、海量小文件存储访问效率高的目的,同时保证了系统的通用性。
[0007]本发明的具体步骤如下:
[0008]1.一种基于Hadoop分布式文件系统的小文件存储方法,包括如下步骤:
[0009](1)新增两台服务器:
[0010]在Hadoop分布式文件系统HDFS之外,新增一台用于监听文件读写请求的网络服务器Websever,新增一台用于处理小文件的小文件处理服务器。
[0011](2)判断文件是否是小文件:
[0012]网络服务器Websever判断监听到的请求文件是否是小于16M的文件,若小于16M则被视为小文件,执行步骤(4),否则,视为大文件,执行步骤(3)。
[0013](3)判断大文件请求状态:
[0014]网络服务器Websever判断监听到的大文件读写请求状态,若是大文件写入请求,执行步骤(6);若是大文件读取请求,执行步骤(9)。
[0015](4)判断小文件请求状态:
[0016]网络服务器Websever判断监听到的小文件读写请求状态,若是小文件写入请求,执行步骤(5),若是小文件读取请求,执行步骤(7)。
[0017](5)预处理写请求:
[0018]小文件处理服务器,采用文件合并方法,合并请求写入的小文件,并在合并文件的首部为该小文件建立本地索引,得到合并文件,将合并文件送入Hadoop分布式文件系统HDFS的客户端。
[0019](6)处理写请求:
[0020]Hadoop分布式文件系统HDFS的客户端,将请求写入的大文件或合并文件,写入Hadoop分布式文件系统HDFS,完成写入操作。
[0021](7)检测缓存区:
[0022](7a)小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件记录,若存在,小文件处理服务器将缓存区中的读请求文件取出返回给客户,完成读取操作,否则,执行步骤(7b);
[0023](7b)小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件的元数据信息,若存在,小文件处理模块直接与HDFS客户端交互,将小文件从HDFS中取出返回给客户,完成读取操作,否则,执行步骤(8)。
[0024](8)预处理读请求:[0025]根据小文件和合并文件的文件名,小文件处理服务器将收到的请求读取的小文件映射到小文件的合并文件中,并将合并文件送入Hadoop分布式文件系统HDFS的客户端。
[0026](9)处理读请求:
[0027]Hadoop分布式文件系统HDFS的客户端,将接收到的请求读取的大文件或合并文件,从Hadoop分布式文件系统HDFS中读出,得到合并文件的元数据信息与本地索引信息,完成读取操作。
[0028](10)分离小文件:
[0029]小文件处理服务器采用小文件分离方法,从Hadoop分布式文件系统HDFS中读出合并文件,将请求读取的小文件从合并文件中分离出来返回给用户,完成读取操作。
[0030](11)建立预取记录:
[0031](Ila)小文件处理模块从步骤(9)得到的合并文件的元数据信息与本地索引信息中,提取每个小文件的文件名、数据节点位置、数据块位置、偏移量offset和文件长度length,建立小文件的元数据预取记录;
[0032](Ilb)小文件处理模块从Hadoop分布式文件系统HDFS中读取与被请求文件同属一个块的小文件,建立该小文件的预取记录。
[0033](12)更新预取记录:
[0034]小文件处理器采用更新预取记录的方法,更新已经预取的小文件的元数据记录和小文件的预取记录。
[0035]本发明与现有的技术相比具有以下优点:
[0036]1.本发明在HDFS体系结构的基础之上,增加了一个小文件处理服务器,克服了现有技术只适用于特殊场景的问题,使得本发明在解决HDFS小文件问题上具有通用性。
[0037]2.本发明结合了小文件特征,提出了合并小文件的方案,并把小文件的本地索引交给Datanode管理,克服了现有技术在解决小文件问题时NameNode硬件存储能力有限这个瓶颈问题,大大提高了 Namenode的工作效率,减轻了其存储负担。
[0038]3.由于本发明的两级索引机制,实现了元数据的预取和小文件的预取,NameNode只管理合并文件的元数据信息,减少了客户端与Namenode的交互频率,克服了现有HDFS系统文件读取操作花费时间较长的缺点,读取相同数目的文件,本发明花费的时间更短,因此,效率更高,提高了提高了小文件检索速度,满足了低时延访问的需求。
【专利附图】

【附图说明】
[0039]图1为本发明的流程图;
[0040]图2为本发明与两种现有方法对NameNode的内存使用趋势的比较图;
[0041]图3为本发明与现有方法的访问效率比较图。
【具体实施方式】
[0042]下面结合附图对本发明做进一步的描述。
[0043]参照图1,本发明的具体实施步骤如下:
[0044]步骤1,新增两台服务。
[0045]在Hadoop分布式文件系统HDFS之外,新增一台用于监听文件读写请求的网络服务器Websever,新增一台用于处理小文件的小文件处理服务器:本发明系统架构由网络服务器Websever、小文件处理服务器、原HDFS系统三部分构成,其中小文件处理服务器主要对小文件进行文件合并、文件映射、文件预取等操作。
[0046]步骤2,判断文件是否是小文件。
[0047]网络服务器Websever判断监听到的请求文件是否是小于16M的文件,若小于16M则被视为小文件,执行步骤4,否则,视为大文件,执行步骤3。
[0048]步骤3,判断大文件请求状态。
[0049]网络服务器Websever判断监听到的大文件读写请求状态,若是大文件写入请求,执行步骤6 ;若是大文件读取请求,执行步骤9。
[0050]步骤4,判断小文件请求状态。
[0051]网络服务器Websever判断监听到的小文件读写请求状态,若是小文件写入请求,执行步骤5,若是小文件读取请求,执行步骤7。
[0052]步骤5,预处理写请求。
[0053]小文件处理服务器,采用文件合并方法,合并请求写入的小文件,并在合并文件的首部为该小文件建立本地索引,得到合并文件,将合并文件送入Hadoop分布式文件系统HDFS的客户端。
[0054]所述文件合并方法,按如下步骤进行:
[0055]第一步,在收到网络服务器Websever发送来的小文件写入请求后,小文件处理服务器为小文件建立本地索引,并持续向本地索引中添加新增的小文件本地索引信息;
[0056]第二步,小文件处理服务器判断本地索引和小文件共占内存的大小,是否超过块block的大小:若不超过,则持续向该block中添加小文件及其本地索引,否则,新增添一个块block,继续向新的block中添加小文件及其本地索引;
[0057]第三步,将本地索引作为合并文件的头文件,本地索引中偏移量offset,文件长度length数据对的值指向小文件在合并文件中的位置,得到小文件的合并文件。
[0058]步骤6,处理写请求。
[0059]Hadoop分布式文件系统HDFS的客户端,将请求写入的大文件或合并文件,写入Hadoop分布式文件系统HDFS,完成写入操作。
[0060]步骤7,检测缓存区。
[0061]第一步,小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件记录,若存在,小文件处理服务器将缓存区中的读请求文件取出返回给客户,完成读取操作,否则,执行第二步;
[0062]第二步,小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件的元数据信息,若存在,小文件处理模块直接与HDFS客户端交互,将小文件从HDFS中取出返回给客户,完成读取操作,否则,执行步骤8。
[0063]步骤8,预处理读请求。
[0064]根据小文件和合并文件的文件名,小文件处理服务器将收到的请求读取的小文件映射到小文件的合并文件中,并将合并文件送入Hadoop分布式文件系统HDFS的客户端。
[0065]步骤9,处理读请求。
[0066]Hadoop分布式文件系统HDFS的客户端,将接收到的请求读取的大文件或合并文件,从Hadoop分布式文件系统HDFS中读出,得到合并文件的元数据信息与本地索引信息,完成读取操作。
[0067]步骤10,分离小文件。
[0068]小文件处理服务器采用小文件分离方法,从Hadoop分布式文件系统HDFS中读出合并文件,将请求读取的小文件从合并文件中分离出来返回给用户,完成读取操作。
[0069]所述文件合并方法,按如下步骤进行:
[0070]第一步,小文件处理服务器通过合并文件的元数据信息得到请求读取文件的本地索引,本地索引中的偏移量offset,文件长度length数据对指向小文件在合并文件中的位置;
[0071]第二步,小文件处理服务器通过小文件在合并文件中的位置,将小文件从合并文件中分离出来。
[0072]步骤11,建立预取记录。
[0073]第一步,小文件处理模块从步骤9得到的合并文件的元数据信息与本地索引信息中,提取每个小文件的文件名、数据节点位置、数据块位置、偏移量offset和文件长度length,建立小文件的元数据预取记录。
[0074]第二步,小文件处理模块从Hadoop分布式文件系统HDFS中读取与被请求文件同属一个块的小文件,建立该小文件的预取记录。
[0075]步骤12,更新预取记录。
[0076]小文件处理器采用更新预取记录的方法,更新已经预取的小文件的元数据记录和小文件的预取记录。
[0077]所述更新预取记录的方法,按如下步骤进行:
[0078]第一步,在小文件的元数据预取记录和小文件的预取记录的首部,分别添加一个用于记录文件访问频率的32位的文件访问标识value ;
[0079]第二步,将文件访问标识value的初始值设为1,以一分钟为计时单位,若有用户访问预取的本地索引文件记录和预取的小文件记录,文件访问标识value的值加1,否则,文件访问标识value的值减I ;
[0080]第三步,当文件访问标识value的值为O时,将预取信息从小文件处理器的缓存中移除。
[0081]本发明的效果可以通过下述仿真实验得到验证:
[0082]1.仿真条件:
[0083]本发明的仿真是在主频2.5GHz intel (R) Core (TM) i5CPU的硬件环境以及MATLABR2009b, Window XP Professional 的软件环境下进行的。
[0084]2.仿真内容与结果分析:
[0085]采用本发明的基于Hadoop分布式文件系统小文件存储方法与原Hadoop分布式文件系统HDFS和HAR归档方法相比,NameNode的内存使用趋势的比较如图2所示,访问效率的比较如图3所示。
[0086]图2是本发明与两种现有方法对NameNode的内存使用趋势的比较图,横坐标表示小文件的数量,纵坐标表示小文件元数据占用NameNode内存,物理单位为MB。本发明分别选取2000、4000、6000、8000、10000个小文件,分别使用原HDFS系统、HAR和本发明三种方法进行仿真,对三种方法下小文件元数据占用NameNode内存进行统计,最终得到NameNode的内存使用趋势的三根曲线。由图2可见,对于原HDFS系统和HAR方法,随着文件数目的逐步增多,其NameNode内存占用呈线性增长,采用HAR方法对缓解NameNode的存储压力有一定缓解。但是,通过同样多的小文件数量时,对三根曲线的纵坐标比较可知,本发明占用NameNode内存明显比现有两种方法小得多,在小文件的存储效率上大大高于原始HDFS和HAR方法,且随着小文件数目的增加,本发明方法曲线的线性增长越缓慢,说明优越性越突出。
[0087]图3为本发明与现有方法的访问效率比较图,横坐标表示三种解决方案,纵坐标表示三种解决方案下访问10000个小文件的平均访问时间,物理单位为ms。本发明选取10000个小文件,分别使用原HDFS系统、HAR和本发明三种方法进行仿真,对三种方法下访问10000个小文件耗费的总时间进行统计,计算出访问一个小文件的平均访问时间,最终得到访问效率比较图。由图3可见,通过对三种方法下对10000个小文件访问时间即纵坐标的比较可知,本发明方法和原始HDFS及HAR相比,其平均访问时间MPM大大减小,访问效率较高。
[0088]仿真结果表明:本发明由于采用了独立于原HDFS系统的小文件处理服务器来单独处理小文件的合并、映射、预取等,减轻了 NameNode的负载,提高了 HDFS对小文件的存储访问效率,同时保证了系统的通用性。
【权利要求】
1.一种基于Hadoop分布式文件系统的小文件存储方法,包括如下步骤: (1)新增两台服务器: 在Hadoop分布式文件系统HDFS之外,新增一台用于监听文件读写请求的网络服务器Websever,新增一台用于处理小文件的小文件处理服务器; (2)判断文件是否是小文件: 网络服务器Websever判断监听到的请求文件是否是小于16M的文件,若小于16M则被视为小文件,执行步骤(4),否则,视为大文件,执行步骤(3); (3)判断大文件请求状态: 网络服务器Websever判断监听到的大文件读写请求状态,若是大文件写入请求,执行步骤(6);若是大文件读取请求,执行步骤(9); (4)判断小文件请求状态: 网络服务器Websever判断监听到的小文件读写请求状态,若是小文件写入请求,执行步骤(5),若是小文件读取请求,执行步骤(7); (5)预处理写请求: 小文件处理服务器,采用文件合并方法,合并请求写入的小文件,并在合并文件的首部为该小文件建立本地索引,得到合并文件,将合并文件送入Hadoop分布式文件系统HDFS的客户端; (6)处理写请求: Hadoop分布式文件系统HDFS的客户端,将请求写入的大文件或合并文件,写入Hadoop分布式文件系统HDFS,完成写入操作; (7)检测缓存区: (7a)小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件记录,若存在,小文件处理服务器将缓存区中的读请求文件取出返回给客户,完成读取操作,否则,执行步骤(7b); (7b)小文件处理服务器检测缓存区中是否存在网络服务器Websever监听到的读请求文件的元数据信息,若存在,小文件处理模块直接与HDFS客户端交互,将小文件从HDFS中取出返回给客户,完成读取操作,否则,执行步骤(8); (8)预处理读请求: 根据小文件和合并文件的文件名,小文件处理服务器将收到的请求读取的小文件映射到小文件的合并文件中,并将合并文件送入Hadoop分布式文件系统HDFS的客户端; (9)处理读请求: Hadoop分布式文件系统HDFS的客户端,将接收到的请求读取的大文件或合并文件,从Hadoop分布式文件系统HDFS中读出,得到合并文件的元数据信息与本地索引信息,完成读取操作; (10)分离小文件: 小文件处理服务器采用小文件分离方法,从Hadoop分布式文件系统HDFS中读出合并文件,将请求读取的小文件从合并文件中分离出来返回给用户,完成读取操作; (11)建立预取记录: (Ila)小文件处理模块从步骤(9)得到的合并文件的元数据信息与本地索引信息中,提取每个小文件的文件名、数据节点位置、数据块位置、偏移量offset和文件长度length,建立小文件的元数据预取记录; (Ilb)小文件处理模块从Hadoop分布式文件系统HDFS中读取与被请求文件同属一个块的小文件,建立该小文件的预取记录; (12)更新预取记录: 小文件处理器采用更新预取记录的方法,更新已经预取的小文件的元数据记录和小文件的预取记录。
2.根据权利要求1所述的基于Hadoop分布式文件系统的小文件存储方法,其特征在于,步骤(5)中所述文件合并方法,按如下步骤进行: 第一步,在收到网络服务器Websever发送来的小文件写入请求后,小文件处理服务器为小文件建立本地索引,并持续向本地索引中添加新增的小文件本地索引信息; 第二步,小文件处理服务器判断本地索引和小文件共占内存的大小,是否超过块block的大小:若不超过,则持续向该block中添加小文件及其本地索弓丨,否则,新增添一个块block,继续向新的block中添加小文件及其本地索引; 第三步,将本地索引作为合并文件的头文件,本地索引中偏移量offset,文件长度length数据对的值指向小文件在合并文件中的位置,得到小文件的合并文件。
3.根据权利要求1所述的基于Hadoop分布式文件系统的小文件存储方法,其特征在于,步骤(10)中所述小文件分离方法,按如下步骤进行: 第一步,小文件处理服务器通过合并文件的元数据信息,得到请求读取文件的本地索引,本地索引中的偏移量offset与文件长度length数据对,指向小文件在合并文件中的位置;` 第二步,小文件处理服务器通过小文件在合并文件中的位置,将小文件从合并文件中分离出来。
4.根据权利要求1所述的基于Hadoop分布式文件系统的小文件存储方法,其特征在于,步骤(12)所述更新预取记录的方法,按如下步骤进行: 第一步,在小文件的元数据预取记录和小文件的预取记录的首部,分别添加一个用于记录文件访问频率的32位的文件访问标识value ; 第二步,将文件访问标识value的初始值设为1,以一分钟为计时单位,若有用户访问预取的本地索引文件记录和预取的小文件记录时,将文件访问标识value的值加1,否则,将文件访问标识value的值减I ; 第三步,当文件访问标识value的值为O时,将预取信息从小文件处理器的缓存中移除。
【文档编号】H04L29/08GK103856567SQ201410116155
【公开日】2014年6月11日 申请日期:2014年3月26日 优先权日:2014年3月26日
【发明者】樊凯, 李慧莹, 李晖 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1