一种HDFS中文件的存储方法及装置与流程

文档序号:13094510阅读:182来源:国知局
一种HDFS中文件的存储方法及装置与流程

本发明涉及hdfs文件系统领域,特别是涉及一种hdfs中文件的存储方法及装置。



背景技术:

hadoop是近几年发展的比较成熟的大数据计算平台之一,凭借其可靠、高效、可伸缩的特性在互联网领域得到了广泛的应用,同时也得到了学术界的普遍关注。hdfs作为hadoop的分布式文件系统,已经成为海量存储集群上部署的主流文件系统。

hdfs由一个namenode和若干个datanode组成,其中datanode是文件系统的数据节点,用于存储数据;namenode是文件系统的主节点,负责记录和管理datanode中所存的文件。hdfs通过分布式的方式存储数据,因此能够存储的数据量较大,并且由于数据节点中的数据存在定时的冗余备份以及数据节点之间的数据定时流动,因此使数据更加安全可靠。由于数据节点中的数据的信息均记录在主节点中,所以主节点的存储空间影响着数据节点中能够实际存储的数据量,并且存储小文件与存储大文件一样都会在主节点中占用同样的空间,所以hdfs对于海量的小文件存储往往会大量占用的主节点中数据信息的记录空间。可见,上述情况在加剧了主节点的工作压力的同时,还造成数据节点中存储空间的浪费,降低了hdfs整体的存储效率。

由此可见,提供一种hdfs中文件的存储方法,以减轻主节点工作压力并且提高hdfs存储效率,是本领域技术人员亟待解决的问题。



技术实现要素:

本发明的目的是提供一种hdfs中文件的存储方法及装置,节省了主节点的存储空间,并且减轻了主节点工作压力并且提高了hdfs存储效率。

为解决上述技术问题,本发明提供一种hdfs中文件的存储方法,包括:

将文件存储至数据节点的数据块中;

按照预设方式将文件的相关信息记录在第一索引中,并将第一索引存储于数据节点中;

将第一索引记录在第二索引中,并将第二索引存储于主节点中。

优选的,按照预设方式将文件的相关信息记录在第一索引中具体为:

按照同类型的相关信息记录在相同索引的方式将相关信息记录在第一索引中。

优选的,第一索引的内容包括:

文件的长度、文件的偏移量以及文件的文件名。

优选的,第二索引的内容包括:

第一索引的索引名、文件在第一索引中的位置以及文件所占用的数据块个数。

优选的,当获取到查找文件的指令时,该方法进一步包括:

在第二索引中根据文件的文件名查找相应的第一索引;

根据第一索引中记录的文件在数据块中的位置,获得文件。

优选的,在获得文件后,该方法进一步包括:

预先读取与文件相关的文件。

此外,本发明还提供一种hdfs中文件的存储装置,包括:

存储模块,用于将文件存储至数据节点的数据块中;

第一索引处理模块,用于按照预设方式将文件的相关信息记录在第一索引中,并将第一索引存储于数据节点中;

第二索引处理模块,用于将第一索引记录在第二索引中,并将第二索引存储于主节点中。

优选的,该装置进一步包括:

文件获取模块,用于在第二索引中根据文件的文件名查找相应的第一索引,并根据第一索引中记录的文件在数据块中的位置,获得文件。

优选的,该装置进一步包括:

预先读取模块,用于预先读取与文件相关的文件。

本发明所提供的hdfs中文件的存储方法,通过采用两层索引的方式,对文件进行了聚合。因此即使是海量的小文件,也可以将小文件的信息先进行聚合,并将初步聚合所获得的第一层索引存储在数据节点,进而再对第一层索引进行聚合成为第二层索引,并存储在主节点中。可见,通过将聚合所得的第一层索引存储在数据节点分担了主节点的存储压力,主节点只需要存储由第一层索引进一步聚合所得的索引信息即可获得所有小文件的相关信息,因此主节点记录相关信息的频率能够相对降低,并且能够记录更多的相关信息。可见,本发明更加节省主节点的存储空间,并且能够减轻主节点工作压力并且提高hdfs存储效率。此外,本发明还提供一种hdfs中文件的存储装置,与上述的方法对应,有益效果如上所述。

附图说明

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

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

图2为本发明实施例提供的另一种hdfs中文件的存储方法的流程图;

图3为本发明实施例提供的一种hdfs中文件的存储装置结构图。

具体实施方式

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

本发明的核心是提供一种hdfs中文件的存储方法及装置,节省了主节点的存储空间,并且减轻了主节点工作压力并且提高了hdfs存储效率。

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

实施例一

图1为本发明实施例提供的一种hdfs中文件的存储方法的流程图。请参考图1,hdfs中文件的存储方法的具体步骤包括:

步骤s10:将文件存储至数据节点的数据块中。

可以理解的是,本步骤中存储于数据节点的文件的相关信息将在后续步骤中通过索引的形式进行记录。

步骤s11:按照预设方式将文件的相关信息记录在第一索引中,并将第一索引存储于数据节点中。

本步骤的目的在于,将文件的相关信息先汇总为第一层的索引,并将索引存储于数据节点以减轻主节点的压力。需要说明的是,本发明中的索引指的是一列值或若干列值的集合以及相应指向表中物理标识这些值的数据页的逻辑指针清单,索引相当于图书的目录,根据目录页码可以快速找到所需的内容。另外,预设的方式可以根据用户的需要而定,可以是将同类型的文件记录在同一索引,当然也可以是预先规定每一个索引的大小,将获取到的文件按照顺序依次记录在索引中,在此不做具体限定。

步骤s12:将第一索引记录在第二索引中,并将第二索引存储于主节点中。

需要说明的是,本步骤是将第一索引聚合为第二索引,相当于再次将文件的相关信息进行了汇总,并且将汇总得到的结果存储在主节点中,进而在保证主节点所存储的索引信息较少的同时能够根据第二索引的内容找到第一索引中所记录的任意文件。

本发明所提供的hdfs中文件的存储方法,通过采用两层索引的方式,对文件进行了聚合。因此即使是海量的小文件,也可以将小文件的信息先进行聚合,并将初步聚合所获得的第一层索引存储在数据节点,进而再对第一层索引进行聚合成为第二层索引,并存储在主节点中。可见,通过将聚合所得的第一层索引存储在数据节点分担了主节点的存储压力,主节点只需要存储由第一层索引进一步聚合所得的索引信息即可获得所有小文件的相关信息,因此主节点记录相关信息的频率能够相对降低,并且能够记录更多的相关信息。可见,本发明更加节省主节点的存储空间,并且能够减轻主节点工作压力并且提高hdfs存储效率。

实施例二

图2为本发明实施例提供的另一种hdfs中文件的存储方法的流程图。图2中步骤s10-s12与图1相同,在此不再赘述。

在上述实施例的基础上,作为一种优选的实施方式,按照预设方式将文件的相关信息记录在第一索引中具体为:

按照同类型的相关信息记录在相同索引的方式将相关信息记录在第一索引中。

可以理解的是,将同类型文件的相关信息归为同一索引的目的在于,每一个索引中记录的内容类别更加明确,当用户获取某一文件以及与该文件相类似或相关联文件时能够在同一索引中进行查找,因此更加快捷,提高使用索引时的整体效率。

在上述实施例的基础上,作为一种优选的实施方式,第一索引的内容包括:

文件的长度、文件的偏移量以及文件的文件名。

第一索引中的文件长度length用于标示文件的长度;文件的偏移量offset用于标示文件在数据块中的位置;文件的文件名key用于唯一标示文件的名称,便于对于文件的查找。另外,第一索引的内容还可以包括文件名称的长度keylen等,用户可以根据需要进行设定,在此不做限定。

在上述实施例的基础上,作为一种优选的实施方式,第二索引的内容包括:

第一索引的索引名、文件在第一索引中的位置以及文件所占用的数据块个数。

第一索引的索引名key可以由第二索引与第一索引名组成,用于标示唯一的第一索引;文件在第一索引中的位置inblockid用于标示索引名key对应的文件所在的数据块;文件所占用的数据块的个数pagelen用于标示文件横跨的数据块个数。另外,第二索引内容还可以包括用于标示索引名长度的keylen等,用户可以根据需要进行设定,在此不做限定。

如图2所示,作为一种优选的实施方式,当获取到查找文件的指令时,该方法进一步包括:

步骤s20:在第二索引中根据文件的文件名查找相应的第一索引。

步骤s21:根据第一索引中记录的文件在数据块中的位置,获得文件。

可以理解的是,在查找某个文件时,需要先在主节点存储的第二索引中找到记录了该文件名的第一索引,进而在数据节点中根据在第一索引所记录的文件的相关信息进一步在数据块中找到对应的文件。

如图2所示,作为一种优选的实施方式,在获得文件后,该方法进一步包括:

步骤s22:预先读取与文件相关的文件。

由于考虑到用户在获取到某一文件后往往还需要继续获取与该文件有关联的文件进行查看,因此预先读取与文件相关的文件的好处在于,当用户获取相关文件时能够直接在预先读取到的文件中找到相应的文件进行提供。可见,这种方法减少在此根据索引查找相关文件的时间开销,进而增加了文件查询的效率。需要说明的是,预先读取的文件可以是与首次获取的文件物理位置相邻的相关文件,也可以是与首次获取的文件逻辑上相关的文件,另外,获取的相关文件的数量可以根据系统的性能或用户的需要进行具体设定,在此均不做限定。

为了对上述实施方式更清楚的了解,下面以“中华书库”工程作为真实场景进行进一步说明:

“中华书库”分为章节与章节下的页,因此使用本方法对“中华书库”进行存储的方法为,将页存入数据块,并且将相同章节的页的信息均记录在同一个第一索引中,进而由于章节不同存在多个第一索引,并且第一索引被存储在数据节点中。第二索引用于记录所有第一索引的信息并存储在主节点中。相应的,在用户获取某一页内容时,先在主节点中根据页所在的章节获取到对应的第二索引信息,再根据第二索引信息中记录的该页的信息找到对应的页,进而得到页中内容。由于考虑到用户在看完某一页的同时往往会看后续页的内容,因此采用预先获取的方法获取与获取也相邻的页的内容,进而更加迅速的为用户提供页的内容,提高用户的查找效率。

实施例三

在上文中对于hdfs中文件的存储方法的实施例进行了详细的描述,本发明还提供一种与该方法对应的于hdfs中文件的存储装置,由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

图3为本发明实施例提供的一种hdfs中文件的存储装置结构图。本发明实施例提供的hdfs中文件的存储装置,具体包括:

存储模块10,用于将文件存储至数据节点的数据块中。

第一索引处理模块11,用于按照预设方式将文件的相关信息记录在第一索引中,并将第一索引存储于数据节点中。

第二索引处理模块12,用于将第一索引记录在第二索引中,并将第二索引存储于主节点中。

本发明所提供的hdfs中文件的存储装置,通过采用两层索引的方式,对文件进行了聚合。因此即使是海量的小文件,也可以将小文件的信息先进行聚合,并将初步聚合所获得的第一层索引存储在数据节点,进而再对第一层索引进行聚合成为第二层索引,并存储在主节点中。可见,通过将聚合所得的第一层索引存储在数据节点分担了主节点的存储压力,主节点只需要存储由第一层索引进一步聚合所得的索引信息即可获得所有小文件的相关信息,因此主节点记录相关信息的频率能够相对降低,并且能够记录更多的相关信息。可见,本发明更加节省主节点的存储空间,并且能够减轻主节点工作压力并且提高hdfs存储效率。

在实施例三的基础上,该装置还包括:

文件获取模块,用于在第二索引中根据文件的文件名查找相应的第一索引,并根据第一索引中记录的文件在数据块中的位置,获得文件。

在实施例三的基础上,该装置还包括:

预先读取模块,用于预先读取与文件相关的文件。

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

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

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