一种基于HDFS的小文件存储优化方法、装置、设备与流程

文档序号:13642275阅读:164来源:国知局

本发明涉及数据存储技术领域,特别是涉及一种基于hdfs的小文件存储优化方法、装置、设备和计算机存储介质。



背景技术:

由apache基金会所开发的分布式系统基础架构(hadoop)是当前主流的企业大数据分析平台。hadoop采用的是分布式文件系统(hadoopdistributedfilesystem,hdfs)来进行数据存储。hdfs采用主从式架构设计模式(master/slavearchitecture),一个名称节点(namenode)和若干数据节点(datanode)构成hdfs集群。

hdfs的这种单名称节点的设计极大地简化了文件系统的结构,非常适合大文件的存储和读取,然而也因此引发了hdfs的小文件存储效率低的问题。因为hdfs中的每个目录和文件的元数据信息都存放在名称节点的内存中,如果系统中存在大量的小文件(比hdfs数据块(默认为64mb)小得多的文件),就会占用更多的内存来存储元数据信息,例如对于一个大小为1gb大文件,hdfs会将其切分为16个大小为64mb的数据块,此时namenode内存开销仅为2.4kb,但如果将其切分为1gb的一万个100kb的文件,namenode的内存开销将增长至1.5mb,即增长了600倍,同时在块大小范围内的小文件则将依然占用64m的空间,处理大量小文件就需要建立更多的映射规约模型(mapreduce)任务,而大量的mapreduce任务间的交互、通信数目也将增大cpu的开销。这些都会使hadoop集群的整体运行效率呈显著下降态势。

在目前的实际应用中,大量小文件的应用场景越来越多,针对hdfs在处理大量小文件的缺点与不足,现有的解决方法是将小文件合并为一个大文件后再导入hdfs,目前常见的的小文件合并方法往往是设定一个缓冲区阈值,在遍历小文件的同时针对缓冲区队列不断累加文件,当累加总大小超过阈值后,即对缓冲区队列中的文件集合实行合并打包存储。

但是这样的算法常常以“文件体积溢出”作为合并条件,同时忽略了文件体积分布不均的缺点,最终造成的结果就是合并后的大文件体积大小各异,在一定程度上对hadoop集群中的namenode节点形成了内存浪费,同时文件体积分布不均也不利于mapreduce框架并行计算高效实施。

可见,如何提升小文件处理的效率,是本领域技术人员亟待解决的问题。



技术实现要素:

本发明实施例的目的是提供一种基于hdfs的小文件存储优化方法、装置、设备和计算机存储介质,可以提升小文件处理的效率。

为解决上述技术问题,本发明实施例提供一种基于hdfs的小文件存储优化方法,包括:

s10:获取待合并文件;

s11:从队列集合中选取出剩余空间最大的一个合并队列,判断所述待合并文件的大小是否大于所述合并队列的剩余空间的大小;若否,则执行s12;若是,则执行s13;

s12:将所述待合并文件加入所述合并队列中;

s13:从队列集合中选取出剩余空间最小的一个合并队列,判断所述合并队列中的文件大小是否超过预设阈值;若是,则执行s14;若否,则执行s17;

s14:判断所述队列集合中合并队列的总数是否超过预设值;若是,则执行s15;若否,则执行s16;

s15:将所述合并队列中的文件合并输出,清空所述合并队列,并将清空后的所述合并队列转换为容忍队列;并执行s17;

s16:将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中;

s17:将所述待合并文件加入到一个容忍队列中,并将所述容忍队列转换为合并队列,并放入到所述队列集合中;并返回所述s10,直至遍历完所有待合并文件。

可选的,在所述s10中包括:

选取待处理文件,判断所述待处理文件大小是否超过上限值;

若否,则将所述文件作为待合并文件。

可选的,还包括:

判断所述队列集合是否存在未进行合并输出的合并队列;

若是,则将所述合并队列中包括的所有文件进行合并输出。

本发明实施例还提供了一种基于hdfs的小文件存储优化装置,包括获取单元、第一判断单元、加入单元、第二判断单元、第三判断单元、输出单元、清空单元和转换单元;

所述获取单元,用于获取待合并文件;

所述第一判断单元,用于从队列集合中选取出剩余空间最大的一个合并队列,判断所述待合并文件的大小是否大于所述合并队列的剩余空间的大小;若否,则触发所述加入单元;若是,则触发所述第二判断单元;

所述加入单元,用于将所述待合并文件加入所述合并队列中;

所述第二判断单元,用于从队列集合中选取出剩余空间最小的一个合并队列,判断所述合并队列中的文件大小是否超过预设阈值;若是,则触发所述第三判断单元;若否,则触发所述转换单元;

所述第三判断单元,用于判断所述队列集合中合并队列的总数是否超过预设值;若是,则触发所述输出单元;若否,则触发所述清空单元;

所述输出单元,用于将所述合并队列中的文件合并输出,清空所述合并队列,并将清空后的所述合并队列转换为容忍队列;并触发所述转换单元;

所述清空单元,用于将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中;

所述转换单元,用于将所述待合并文件加入到一个容忍队列中,并将所述容忍队列转换为合并队列,并放入到所述队列集合中;并触发所述获取单元,直至遍历完所有待合并文件。

可选的,所述获取单元包括判断子单元和作为子单元;

所述判断子单元,用于选取待处理文件,判断所述待处理文件大小是否超过上限值;若否,则触发所述作为子单元;

所述作为子单元,用于将所述文件作为待合并文件。

可选的,还包括第四判断单元,所述第四判断单元,用于判断所述队列集合是否存在未进行合并输出的合并队列;若是,则触发所述输出单元;

所述输出单元还用于将所述合并队列中包括的所有文件进行合并输出。

本发明实施例还提供了一种基于hdfs的小文件存储优化设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上述基于hdfs的小文件存储优化方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述基于hdfs的小文件存储优化方法的步骤。

由上述技术方案可以看出,获取到待合并文件后,从队列集合中选取出剩余空间最大的一个合并队列,判断待合并文件的大小是否大于合并队列的剩余空间的大小;当待合并文件的大小大于合并队列的剩余空间的大小时,则将待合并文件加入该合并队列中;当待合并文件的大小不大于合并队列的剩余空间的大小时,则从队列集合中选取出剩余空间最小的一个合并队列,并判断该合并队列中的文件大小是否超过预设阈值;当未超过预设阈值,则将待合并文件加入到一个容忍队列中,并将该容忍队列转换为合并队列,并放入到所述队列集合中。当超过预设阈值,则进一步判断队列集合中合并队列的总数是否超过预设值;总数超过预设值,则将该合并队列中的文件合并输出,清空该合并队列,并将清空后的该合并队列转换为容忍队列,从而选取一个容忍队列存储该待合并文件;总数未超过预设值,则将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中,重复执行上述操作,直至遍历完所有待合并文件。在该技术方案中根据小文件的体积大小,使其进行均匀分布、再传至合并后的大文件中,同时将文件合并条件合并队列中的文件大小是否超过预设阈值,由此保证合并后的大文件在hdfs中不会被分割出多余的块。在一定程度上降低了名称节点内存负载,同时文件体积均匀分布也将利于mapreduce并行计算的效率发挥,提升了小文件处理效率。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种基于hdfs的小文件存储优化方法的流程图;

图2为本发明实施例提供的一种基于hdfs的小文件存储优化装置的结构示意图;

图3为本发明实施例提供的一种基于hdfs的小文件存储优化设备的硬件结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

接下来,详细介绍本发明实施例所提供的一种基于hdfs的小文件存储优化方法。图1为本发明实施例提供的一种基于hdfs的小文件存储优化方法的流程图,该方法包括:

s10:获取待合并文件。

在本发明实施例中,通过将小文件进行合并输出的方式,提升小文件的处理效率。系统中的待处理文件往往有多个,需要判断所述待处理文件大小是否超过上限值;上限值可以是判断文件是否属于小文件的一个衡量标准,当待处理文件大小未超过上限值时,则说明该待处理文件属于小文件,则将所述文件作为待合并文件,进行后续处理。

s11:从队列集合中选取出剩余空间最大的一个合并队列,判断所述待合并文件的大小是否大于所述合并队列的剩余空间的大小。

在本发明实施例中,可以设置两种类型的队列,一种是合并队列,用于存储待合并文件;另一种是容忍队列,可以作为备用队列,当待合并文件体积偏大,没有合适的合并队列存储待合并文件时,可以用容忍队列存储待合并文件,此时该容忍队列即转化为了合并队列,设置容忍队列可以实现数据的缓冲,保证合并后文件大小尽量均匀分布。队列集合可以用于表示存储各个合并队列的集合。

其中,合并队列和容忍队列可以互相转化,当一个队列用于存储待合并文件时,则该队列即为合并队列;当一个队列作为备用队列时,则该队列即为容忍队列。容忍队列的个数可以设置的小于合并队列的个数。

为了能够快速准确的选取出一个合适的合并队列,每次向合并队列中加入待合并文件时,可以从队列集合中选取一个剩余空间最大的合并队列,通过比较待合并文件的大小和该合并队列的剩余空间的大小,来判断该合并队列是否可以存储待合并文件。

当待合并文件的大小大于所述合并队列的剩余空间的大小时,则说明该合并队列没有足够的剩余空间能够容纳该待合并文件,由于该合并队列是队列集合中剩余空间最大的一个合并队列,此时,该队列集合中的其它合并队列肯定也不存在剩余空间可以容纳该待合并文件的合并队列,对此可以执行s13。

当待合并文件的大小小于等于所述合并队列的剩余空间的大小时,则说明该合并队列有足够的剩余空间能够容纳该待合并文件,则执行s12。

s12:将所述待合并文件加入所述合并队列中。

s13:从队列集合中选取出剩余空间最小的一个合并队列,判断所述合并队列中的文件大小是否超过预设阈值。

当队列集合中没有可以直接存储待合并文件的合并队列时,说明队列集合中各个合并队列的剩余空间均有限,为了实现待合并文件的合并处理,可以对合并队列进行清空处理,或者是选取一个容忍队列存储该待合并文件。

在具体实现中,可以从队列集合中选取出剩余空间最小的一个合并队列,判断该合并队列中的文件大小是否超过预设阈值。

预设阈值可以是合并队列中文件进行合并输出的一个依据。为了避免合并队列中文件体积溢出,保证合并后的大文件在hdfs中不会被分割出多余的块,预设阈值可以以合并队列的存储空间为基准进行设置,例如,可以将预设阈值设置为合并队列中存储空间大小的95%。其中,预设阈值的具体取值,可以根据实际需求进行调整,本发明实施例对于预设阈值的取值不做具体限定。

选取出剩余空间最小的一个合并队列,当该合并队列中的文件大小超过预设阈值,则说明该合并队列中的文件可以进行合并输出,则执行s14;当该合并队列中的文件大小未超过预设阈值,则说明该合并队列中的文件还未达到合并输出的条件,而此时队列集合中又没有合适的合并队列用于存储待合并文件,针对该种情况,可以执行s17。

s14:判断所述队列集合中合并队列的总数是否超过预设值。

预设值可以是合并队列个数的上限值,当队列集合中合并队列的总数未超过预设值时,则执行s16;若当队列集合中合并队列的总数超过预设值时,则说明队列集合中的合并队列的个数已经达到上限值,为了有效控制合并队列的总数,则执行s15。

s15:将所述合并队列中的文件合并输出,清空所述合并队列,并将清空后的所述合并队列转换为容忍队列,并执行s17。

当队列集合中合并队列的总数超过预设值,为了有效控制合并队列的总数,清空后的合并队列将不插入任何文件,而是直接转换为一个容忍队列。而此时为了存储待合并文件则可以执行s17的操作。

s16:将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中。

将文件进行合并输出即将文件统一打包合并存入hdfs。

s17:将所述待合并文件加入到一个容忍队列中,并将所述容忍队列转换为合并队列,并放入到所述队列集合中;并返回所述s10,直至遍历完所有待合并文件。

当没有合适的合并队列可以存储待合并文件时,则可以该待合并文件插入一个容忍队列中,此时,该容忍队列将转换为合并队列,并参与到下一轮的合并队列的挑选中。

每个待合并文件可以按照上述s10至s17的步骤进行合并处理,当完成所有待合并文件的处理后,则可以结束操作。

由上述技术方案可以看出,获取到待合并文件后,从队列集合中选取出剩余空间最大的一个合并队列,判断待合并文件的大小是否大于合并队列的剩余空间的大小;当待合并文件的大小大于合并队列的剩余空间的大小时,则将待合并文件加入该合并队列中;当待合并文件的大小不大于合并队列的剩余空间的大小时,则从队列集合中选取出剩余空间最小的一个合并队列,并判断该合并队列中的文件大小是否超过预设阈值;当未超过预设阈值,则将待合并文件加入到一个容忍队列中,并将该容忍队列转换为合并队列,并放入到所述队列集合中。当超过预设阈值,则进一步判断队列集合中合并队列的总数是否超过预设值;总数超过预设值,则将该合并队列中的文件合并输出,清空该合并队列,并将清空后的该合并队列转换为容忍队列,从而选取一个容忍队列存储该待合并文件;总数未超过预设值,则将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中,重复执行上述操作,直至遍历完所有待合并文件。在该技术方案中根据小文件的体积大小,使其进行均匀分布、再传至合并后的大文件中,同时将文件合并条件合并队列中的文件大小是否超过预设阈值,由此保证合并后的大文件在hdfs中不会被分割出多余的块。在一定程度上降低了名称节点内存负载,同时文件体积均匀分布也将利于mapreduce并行计算的效率发挥,提升了小文件处理效率。

在上述介绍中可知,当合并队列中文件大小超过预设阈值后,则可以将该合并队列中的文件统一打包合并存入hdfs,但是在实际应用中,当遍历完所有的待合并文件后,可能会存在合并队列中文件大小未超过预设阈值的合并队列,对此,可以判断所述队列集合是否存在未进行合并输出的合并队列;若是,则将所述合并队列中包括的所有文件进行合并输出。

通过该判断过程,可以有效解决所有尚未合并的文件仍留存于合并队列中的问题。

图2为本发明实施例提供的一种基于hdfs的小文件存储优化装置的结构示意图,包括获取单元21、第一判断单元22、加入单元23、第二判断单元24、第三判断单元25、输出单元26、清空单元27和转换单元28;

所述获取单元21,用于获取待合并文件。

所述第一判断单元22,用于从队列集合中选取出剩余空间最大的一个合并队列,判断所述待合并文件的大小是否大于所述合并队列的剩余空间的大小;若否,则触发所述加入单元23;若是,则触发所述第二判断单元24。

所述加入单元23,用于将所述待合并文件加入所述合并队列中。

所述第二判断单元24,用于从队列集合中选取出剩余空间最小的一个合并队列,判断所述合并队列中的文件大小是否超过预设阈值;若是,则触发所述第三判断单元25;若否,则触发所述转换单元28。

所述第三判断单元25,用于判断所述队列集合中合并队列的总数是否超过预设值;若是,则触发所述单元26;若否,则触发所述清空单元27。

所述输出单元26,用于将所述合并队列中的文件合并输出,清空所述合并队列,并将清空后的所述合并队列转换为容忍队列;并触发所述转换单元28。

所述清空单元27,用于将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中。

所述转换单元28,用于将所述待合并文件加入到一个容忍队列中,并将所述容忍队列转换为合并队列,并放入到所述队列集合中;并触发所述获取单元21,直至遍历完所有待合并文件。

可选的,所述获取单元包括判断子单元和作为子单元;

所述判断子单元,用于选取待处理文件,判断所述待处理文件大小是否超过上限值;若否,则触发所述作为子单元;

所述作为子单元,用于将所述文件作为待合并文件。

可选的,还包括第四判断单元,所述第四判断单元,用于判断所述队列集合是否存在未进行合并输出的合并队列;若是,则触发所述输出单元;

所述输出单元还用于将所述合并队列中包括的所有文件进行合并输出。

图2所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,获取到待合并文件后,从队列集合中选取出剩余空间最大的一个合并队列,判断待合并文件的大小是否大于合并队列的剩余空间的大小;当待合并文件的大小大于合并队列的剩余空间的大小时,则将待合并文件加入该合并队列中;当待合并文件的大小不大于合并队列的剩余空间的大小时,则从队列集合中选取出剩余空间最小的一个合并队列,并判断该合并队列中的文件大小是否超过预设阈值;当未超过预设阈值,则将待合并文件加入到一个容忍队列中,并将该容忍队列转换为合并队列,并放入到所述队列集合中。当超过预设阈值,则进一步判断队列集合中合并队列的总数是否超过预设值;总数超过预设值,则将该合并队列中的文件合并输出,清空该合并队列,并将清空后的该合并队列转换为容忍队列,从而选取一个容忍队列存储该待合并文件;总数未超过预设值,则将所述合并队列中包括的所有文件进行合并输出,清空所述合并队列,并将所述待合并文件放入清空后的所述合并队列中,重复执行上述操作,直至遍历完所有待合并文件。在该技术方案中根据小文件的体积大小,使其进行均匀分布、再传至合并后的大文件中,同时将文件合并条件合并队列中的文件大小是否超过预设阈值,由此保证合并后的大文件在hdfs中不会被分割出多余的块。在一定程度上降低了名称节点内存负载,同时文件体积均匀分布也将利于mapreduce并行计算的效率发挥,提升了小文件处理效率。

图3为本发明实施例提供的一种基于hdfs的小文件存储优化设备30的硬件结构示意图,包括:存储器31,用于存储计算机程序;处理器32,用于执行所述计算机程序以实现如上述基于hdfs的小文件存储优化方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述基于hdfs的小文件存储优化方法的步骤。

以上对本发明实施例所提供的一种基于hdfs的小文件存储优化方法、装置、设备和计算机存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

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