一种HDFS海量小文件处理方法及系统与流程

文档序号:13454053阅读:299来源:国知局

本发明涉及hdfs数据存储领域,具体是一种hdfs海量小文件处理方法及系统,主要适用于应用于hdfs集群中能够与hdfs包含的各个节点交互的服务器。



背景技术:

hdfs(hadoop分布式文件系统),由一个namenode和若干个datanode组成,是集群的重要组成部分,凭借其可靠、高效、可伸缩的特性,已在大规模计算领域得到了广泛应用。

在互联网的飞速发展下,电子商务、社交网络、移动通信等产生的数据种类很多,数据量非常大。hdfs海量的小文件数据量越来越大。

但hdfs主要针对一次写入、多次读出的使用模式,其设计目的是为了存储超大文件,主要针对百兆以上的文件。海量小文件的存储会造成namenode节点内存的大量消耗,进而会影响对小文件的访问效率。此为现有技术的不足之处。



技术实现要素:

本发明所要解决的技术问题是,针对现有技术的不足,提供一种hdfs海量小文件处理方法及系统,用于提高hdfs对小文件的访问效率。

为解决上述技术问题,本发明提供了一种hdfs海量小文件处理方法,包括步骤:

s1、接收文件上传请求,并判定当前请求上传的文件是否为小文件,所述的小文件为满足文件大小不超过预设的第一阈值的条件的文件;若上述判定结果为是,则执行步骤s3,否则执行步骤s2;

s2、将当前请求上传的文件上传至hdfs集群;

s3、对上述当前请求上传的文件进行缓存;之后执行步骤s4;

s4、计算上述当前已缓存的各请求上传的文件的大小之和、以及统计上述当前已缓存的各请求上传的文件的总数量,并比较上述当前计算出的大小之和与预设的第二阈值的大小关系、且比较上述当前统计出的总数量与预先设定的特定数量阈值的大小关系;若上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值,则执行步骤s5,否则继续执行步骤s1;其中,所述的第二阈值大于所述的第一阈值,所述的特定数量阈值为大于2的正整数;

s5、将当前已缓存的各请求上传的文件合并成一大文件,并创建当前已缓存的各请求上传的文件在所述大文件中的文件索引列表;之后执行步骤s6;

s6、将步骤s5中所述的大文件和文件索引列表,一并上传至hdfs集群;之后执行步骤s7;

s7、清空上述已缓存的各请求上传的文件,之后转而继续执行步骤s1。

进一步地,在上述步骤s3中,将所述的当前请求上传的文件缓存入预先设定的数据缓存队列。

其中,所述的第二阈值为64m。

其中,所述的第一阈值为2m。

另外,本发明还提供了一种hdfs海量小文件处理系统,包括:

合并单元,用于本系统中的文件合并;

上传单元,用于将本系统中相关的文件数据上传至hdfs集群;

缓存单元,用于本系统的文件缓存;

计算单元,用于计算所述缓存单元中当前已缓存的各请求上传的文件的大小之和,以及用于统计所述缓存单元中当前已缓存的各请求上传的文件的总数量;

上传文件请求接收单元,用于接收文件上传请求,并用于将当前接收到的文件上传请求发送至所述的决策单元;

决策单元,分别连接所述的上传文件请求接收单元、合并单元、上传单元、缓存单元和计算单元,用于接收上传文件请求接收单元发送来的文件上传请求,并用于判定当前接收到的文件上传请求中所包含的当前请求上传的文件是否为小文件,若判定结果为是,则用于调用所述的缓存单元,对上述当前接收到的当前请求上传的文件进行缓存;若上述判定结果为当前请求上传的文件不是小文件,则调用所述的上传单元,将上述当前接收到的当前请求上传的文件上传至hdfs集群;

该决策单元还用于在每次调用所述的缓存单元进行相应文件的缓存之后、以及在下一次调用所述的缓存单元进行相应文件的缓存之前,还用于调用所述的计算单元计算所述缓存单元中当前已缓存的各请求上传的文件的大小之和、以及统计所述缓存单元中当前已缓存的各请求上传的文件的总数量,并用于比较上述计算单元当前计算出的大小之和与预设的第二阈值的大小关系、且用于比较上述计算单元当前统计出的总数量与预先设定的特定数量阈值的大小关系,并用于在上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值时,调用所述的合并单元,用于将所述缓存单元中当前已缓存的各请求上传的文件合并成一大文件;还用于在每次调用所述的合并单元完成当前次的文件合并后,用于创建上述缓冲单元中当前已缓存的各请求上传的文件在所述大文件中的文件索引列表,并用于调用所述的上传单元将上述当前次合并成的大文件及与该大文件相对应的文件索引列表上传至hdfs集群;还用于在每次将相应的大文件及其对应的文件索引列表上传至hdfs集群后,用于控制清空所述的缓存单元;

其中,所述的小文件为满足文件大小不超过预设的第一阈值的条件的文件,所述的第二阈值大于所述的第一阈值,所述的特定数量阈值为大于2的正整数。

其中,在该所述的hdfs海量小文件处理系统中,所述的缓冲单元采用数据缓存队列。

其中,在该所述的hdfs海量小文件处理系统中,所述的第二阈值为64m。

其中,在该所述的hdfs海量小文件处理系统中,所述的第一阈值为2m。

与现有技术相比,本发明的优点在于:

本发明采用文件大小和文件个数同时进行判断的处理方式,且在文件大小和文件个数中的任何一方对应满足特定的判定条件时,均能够实现小文件的合并,这既能够减少小文件对hdfs节点内存的占用,也能避免访问小文件过程的频繁跳转,还能够在服务器接收到的文件上传请求的数量相对较少的情况下,避免所接收到的请求上传的文件等待时间过长,因此能够有效地提高hdfs对小文件的访问效率。

由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。

附图说明

图1为本发明所述hdfs海量小文件处理方法的方法流程图示意图。

图2为本发明所述hdfs海量小文件处理系统的功能结构框图示意图。

具体实施方式

为使本发明的技术方案和优点更加清楚,下面将结合附图,对本发明的技术方案进行清楚、完整地描述。

具体实施方式1:

图1为本发明所述hdfs海量小文件处理方法的一种具体实施方式。在该具体实施方式中,所述的该hdfs海量小文件处理方法,应用于hdfs集群中能够与hdfs包含的各个节点交互的服务器,包括步骤:

s1、服务器接收文件上传请求,并判定当前请求上传的文件是否为小文件,所述的小文件为满足文件大小不超过预设的第一阈值的条件的文件;若上述判定结果为是,则执行步骤s3,否则执行步骤s2;

s2、将当前请求上传的文件上传至hdfs集群;

s3、对上述当前请求上传的文件进行缓存;之后执行步骤s4;

s4、计算上述当前已缓存的各请求上传的文件的大小之和、以及统计上述当前已缓存的各请求上传的文件的总数量,并比较上述当前计算出的大小之和与预设的第二阈值的大小关系、且比较上述当前统计出的总数量与预先设定的特定数量阈值的大小关系;若上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值,则执行步骤s5,否则继续执行步骤s1;其中,所述的第二阈值大于所述的第一阈值,所述的特定数量阈值为大于2的正整数;

s5、将当前已缓存的各请求上传的文件合并成一大文件,并创建当前已缓存的各请求上传的文件在所述大文件中的文件索引列表;之后执行步骤s6;

s6、将步骤s5中所述的大文件和文件索引列表,一并上传至hdfs集群;之后执行步骤s7;

s7、清空上述已缓存的各请求上传的文件,之后转而继续执行步骤s1。

使用时,服务器接收文件上传请求,并判定当前请求上传的文件是否为小文件,若判定结果为否,则将当前请求上传的文件直接上传至hdfs集群,若上述判定结果为是,则对上述当前请求上传的文件进行缓存处理;之后,服务器计算上述当前已缓存的各请求上传的文件的大小之和、以及统计上述当前已缓存的各请求上传的文件的总数量,并比较上述当前计算出的大小之和与预设的第二阈值的大小关系、且比较上述当前统计出的总数量与预先设定的特定数量阈值的大小关系;若上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值,则将当前已缓存的各请求上传的文件合并成一大文件,并创建当前已缓存的各请求上传的文件在所述大文件中的文件索引列表,之后将当前合并成的大文件及其对应的文件索引列表一并上传至hdfs集群,然后清空服务器中已缓存的各请求上传的文件,以等待缓存新的请求上传的文件。

其中,本发明在如上所述的两个判定条件(即:(1)当前计算出的大小之和大于或等于上述预设的第二阈值,(2)上述统计出的总数量大于或等于预先设定的特定数量阈值。)中的任意一个满足时,均能够实现小文件的合并,这既减少了小文件对hdfs节点内存的占用,也避免了访问小文件过程的频繁跳转,还在服务器接收到的文件上传请求的数量相对较少的情况下,避免了所接收到的请求上传的文件等待时间过长,因此提高了hdfs对小文件的访问效率。

其中,在上述步骤s3中,将所述的当前请求上传的文件缓存入预先设定的数据缓存队列。上述步骤s7中所述的清空上述已缓存的各请求上传的文件,即为清空所述的数据缓存队列,用于等待新的文件缓存。

在本实施方式中,所述的第二阈值为64m,所述的第一阈值为2m。

如图2所示,本发明还提供了一种hdfs海量小文件处理系统,包括:合并单元,用于本系统中的文件合并;上传单元,用于将本系统中相关的文件数据上传至hdfs集群;缓存单元,用于本系统的文件缓存;计算单元,用于计算所述缓存单元中当前已缓存的各请求上传的文件的大小之和,以及用于统计所述缓存单元中当前已缓存的各请求上传的文件的总数量;上传文件请求接收单元,用于接收文件上传请求,并用于将当前接收到的文件上传请求发送至所述的决策单元;决策单元,分别连接所述的上传文件请求接收单元、合并单元、上传单元、缓存单元和计算单元,用于接收上传文件请求接收单元发送来的文件上传请求,并用于判定当前接收到的文件上传请求中所包含的当前请求上传的文件是否为小文件,若判定结果为是,则用于调用所述的缓存单元,对上述当前接收到的当前请求上传的文件进行缓存;若上述判定结果为当前请求上传的文件不是小文件,则调用所述的上传单元,将上述当前接收到的当前请求上传的文件上传至hdfs集群;该决策单元还用于在每次调用所述的缓存单元进行相应文件的缓存之后、以及在下一次调用所述的缓存单元进行相应文件的缓存之前,还用于调用所述的计算单元计算所述缓存单元中当前已缓存的各请求上传的文件的大小之和、以及统计所述缓存单元中当前已缓存的各请求上传的文件的总数量,并用于比较上述计算单元当前计算出的大小之和与预设的第二阈值的大小关系、且用于比较上述计算单元当前统计出的总数量与预先设定的特定数量阈值的大小关系,并用于在上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值时,调用所述的合并单元,用于将所述缓存单元中当前已缓存的各请求上传的文件合并成一大文件;还用于在每次调用所述的合并单元完成当前次的文件合并后,用于创建上述缓冲单元中当前已缓存的各请求上传的文件在所述大文件中的文件索引列表,并用于调用所述的上传单元将上述当前次合并成的大文件及与该大文件相对应的文件索引列表上传至hdfs集群;还用于在每次将相应的大文件及其对应的文件索引列表上传至hdfs集群后,用于控制清空所述的缓存单元。

其中,所述的小文件为满足文件大小不超过预设的第一阈值的条件的文件,所述的第二阈值为64m,所述的第一阈值采用2m,所述的缓冲单元采用数据缓存队列。

使用之前,将该安装于应用于hdfs集群中能够与hdfs包含的各个节点交互的服务器中。使用时,通过上传文件请求接收单元接收文件上传请求,并将其当前接收到的文件上传请求发送至所述的决策单元;之后,决策单元:接收上传文件请求接收单元发送来的文件上传请求,并判定当前接收到的文件上传请求中所包含的当前请求上传的文件是否为小文件,若判定结果为是,则调用所述的缓存单元,对上述当前接收到的当前请求上传的文件进行缓存;若上述判定结果为当前请求上传的文件不是小文件,则调用所述的上传单元,将上述当前接收到的当前请求上传的文件上传至hdfs集群。其中,使用时,该决策单元在每次调用所述的缓存单元进行相应文件的缓存之后、以及在下一次调用所述的缓存单元进行相应文件的缓存之前,调用所述的计算单元计算所述缓存单元中当前已缓存的各请求上传的文件的大小之和、以及统计所述缓存单元中当前已缓存的各请求上传的文件的总数量,并比较上述计算单元当前计算出的大小之和与预设的第二阈值的大小关系、且比较上述计算单元当前统计出的总数量与预先设定的特定数量阈值的大小关系,并在上述比较的结果为上述当前计算出的大小之和大于或等于上述预设的第二阈值、或为上述统计出的总数量大于或等于预先设定的特定数量阈值时,调用所述的合并单元,将所述缓存单元中当前已缓存的各请求上传的文件合并成一大文件;且在每次调用所述的合并单元完成当前次的文件合并后,通过所述的决策单元创建上述缓冲单元中当前已缓存的各请求上传的文件在所述大文件中的文件索引列表,并通过所述的决策单元调用所述的上传单元将当前次合并成的大文件及与该大文件相对应的文件索引列表上传至hdfs集群。在每次将相应的大文件及其对应的文件索引列表上传至hdfs集群后,在所述决策单元的控制下,控制清空所述的缓存单元,即清空所述的数据缓存队列,以等待缓存新的请求上传的文件。

综上,本发明所述的hdfs海量小文件处理系统,也采用文件大小和文件个数同时进行判断的处理方式,且在文件大小和文件个数中的任何一方对应满足特定的判定条件时,均能实现小文件的合并,可见与上述hdfs海量小文件处理方法具有相同的优点,在此不再赘述。

综上,本发明这既能够减少小文件对hdfs节点内存的占用,也能避免访问小文件过程的频繁跳转,还能够在服务器接收到的文件上传请求的数量相对较少的情况下,避免所接收到的请求上传的文件等待时间过长,因此提高了hdfs对小文件的访问效率。

以上实施方式仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施方式对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施方式技术方案的范围。

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