一种基于Hadoop的小文件分级索引的存储优化方法
【技术领域】
[0001]本发明属于云存储技术领域,更具体地,涉及一种基于Hadoop的小文件分级索引的存储优化方法。
【背景技术】
[0002]Hadoop是一个分布式系统基础架构,由Apache基金会开发。Hadoop是当前主流的云存储平台,它由一个NameNode和多个DataNode组成,其中NameNode负责管理文件系统命名空间和控制外部客户端的访问,DataNode负责具体数据的存储。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统,简称HDFS。HDFS有着高容错性的特点,并且设计用来部署在低廉的硬件上。而且它提供高传输率来访问应用程序的数据,适合那些有着超大数据集的应用程序。
[0003]Hadoop是被设计用来处理大文件的,它将到来的大文件存储在不同datanode的不同数据块上,并在namenode上记录大文件的元数据。当要对某个文件进行操作时,首先访问namenode,根据namenode的反馈信息定位到各个块置,找到这个文件,然后使用相应的命令对进行操作。需要说明是,这些操作都是按块进行的。而对于小文件,Hadoop便不再那么高效,由于每个独立的小文件中所含有数据量是非常少,只能作为一块(远小于数据块的默认大)存储或操作,且海量文件就意味着元数据也是海量的。如何有效地存储和管理大量的小文件,成为亟待解决的难题。
[0004]在HDFS分布式文件系统中,任何文件信息、文件块信息在NameNode (主节点)的内存中都以一个对象的形式存储,每一个对象约占150字节,大量小文件使NameNode的内存使用情况严重制约了集群的扩展。
[0005]HDFS访问大量小文件速度远远小于访问同等大小的大文件。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从Datanode到Datanode的获取文件,这样是非常的低效的一种访问方式。
[0006]MapReduce (并行数据处理)处理批量小文件时间远远长于处理同等大小的大文件的时间。处理每一个小文件要占用一个task(任务),若小文件过多,则大部分处理时间都耗费在启动task和释放task上。Map函数通常处理的是一个块大小的输入,若有非常多的小文件会产生大量的Map函数来执行,而这些Map函数无疑会占用大量的内存。
[0007]对于大量的小文件引起的问题,Hadoop技术自身提供了三个解决方案,分别为 Hadoop Archive (Hadoop 归档),Sequence f ile (序列文件)和CombineFileInputFormat (组合文件输入格式)。
[0008]Hadoop Archive将小文件打包成HAR文件,首先是建立一个主索引结构,这个主索引指向二级索引,由二级索引指向具体的小文件。因此访问每个HAR文件将需要完成两层索引文件读取和文件本身数据读取,所以实际上通过HAR来读取一个文件可能会比直接从HDFS中读取文件效率要低。Hadoop Archive, Sequence file和CombineFileInputFormat这三个工具不能自动化,都需要管理员手动添加,效率非常的低下,不适合大量的文件操作。
【发明内容】
[0009]本发明的主要目的在于解决现有Hadoop分布式文件系统对于海量小文件存储、读取和写入操作效率低的问题,提出了一种基于hadoop的小文件分级索引的存储优化方法。
[0010]为实现上述目的,本发明提供了一种基于Hadoop的小文件分级索引的存储优化方法,在Hadoop分布式文件系统HDFS之外,新增一台用于文件读写请求的网络服务器Webserver,新增一台用于处理小文件的小文件处理服务器,所述方法包括如下步骤:
[0011](I)网络服务器Webserver接收文件读取或写入请求,并判断文件是否大于预设块大小,大于预设块大小的文件按照HDFS文件系统的正常流程处理,小于预设块大小的文件被送到小文件处理服务器进行后续处理;
[0012](2)小文件处理服务器对小文件进行进一步的划分,把I?1023KB之间的小文件划分为K级小文件,把IM到预设块大小之间的小文件划分为M级小文件;
[0013](3)对K级小文件建立二级索引,其中,一级索引存储在小文件处理服务器中,二级索引存储在datanode中,对M级小文件建立线性索引结构,存储在小文件处理服务器中;
[0014](4)小文件处理服务器的缓存区保存部分已访问的小文件和它的元数据信息,并根据小文件的访问频率来更新缓存区中的小文件及其元数据。
[0015]进一步地,所述网络服务器Webserver为一台监听文件读写请求的网络服务器,小文件处理服务器是一台用于小文件处理的服务器。
[0016]进一步地,所述小文件大小小于所述分布式文件系统上块的大小。
[0017]进一步地,所述小文件处理服务器对小文件进一步划分,步骤如下:
[0018]I)小文件处理服务器收到读取或写入小文件的操作后,小文件分级模块将I?1023KB的小文件划分为K级,将IM到块大小之间的小文件划分为M级;
[0019]2)K级小文件采用二级索引,一级索引为范围划分,以1000条记录为一个范围,存储在小文件处理服务器中,二级索引是真正记录小文件在合并后的大文件中的偏移的索引文件,存储在datanode中;M级小文件采用线性索引结构,存储在小文件处理服务器中。
[0020]进一步地,小文件处理服务器中的缓存保存部分已访问文件的相关文件和相应的元数据信息,并根据采用相应的更新策略来更新存储在缓存区中的小文件及相应的元数据?目息O
[0021]进一步地,对于文件写入请求,其处理过程如下:
[0022](1.1)网络服务器Webserver判断文件的请求类型为文件写入请求;
[0023](1.2)网络服务器Webserver判断文件是否大于预设块大小,大于预设块大小的文件按照HDFS文件系统的正常流程处理,小于预设块大小的文件被送到小文件处理服务器进行后续处理;
[0024](1.3)小文件处理服务器对小文件进行进一步的划分,把I?1023KB之间的小文件划分为K级小文件,把IM到预设块大小之间的小文件划分为M级小文件;
[0025](1.4)对K级小文件建立二级索引,其中,一级索引存储在小文件处理服务器中,二级索引存储在datanode中,对M级小文件建立线性索引结构,存储在小文件处理服务器中。
[0026]进一步地,对于文件读取请求,其处理过程如下:
[0027](2.1)小文件处理服务器接收到小文件的读取请求,首先检查缓存中是否存在需要读取的小文件,若存在,小文件处理服务器将缓存中的读请求文件取出返回给客户,完成读取操作,否则,执行步骤(2.2);
[0028](2.2)小文件处理服务器检查缓存中是否存在读请求小文件的元数据信息,若存在,小文件处理服务器将直接和HDFS客户端交互,将小文件从HDFS中取出返回给用户,完成读取操作,否则执行步骤(2.3);
[0029](2.3)根据小文件和合并文件的文件名,小文件处理服务器将收到的请求读取的小文件映射到小文件的合并文件中,并将合并文件送入Hadoop分布式文件系统HDFS的客户端;
[0030](2.4) Hadoop分布式文件系统HDFS的客户端,将接收到的请求读取的合并文件,从Hadoop分布式文件系统HDFS中读出,得到合并文件的元数据信息与索引信息,从而完成读取操作。
[0031]进一步地,所述小文件处理服务器采用小文件分离方法,从Hadoop分布式文件系统HDFS中读取合并文件,将请求读取的小文件从合并文件中分离出来