CN111538702A - 一种基于Hadoop的海量小文件处理方法和设备 - Google Patents
一种基于Hadoop的海量小文件处理方法和设备 Download PDFInfo
- Publication number
- CN111538702A CN111538702A CN202010313667.2A CN202010313667A CN111538702A CN 111538702 A CN111538702 A CN 111538702A CN 202010313667 A CN202010313667 A CN 202010313667A CN 111538702 A CN111538702 A CN 111538702A
- Authority
- CN
- China
- Prior art keywords
- file
- small
- index
- information
- determining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Hadoop的海量小文件处理方法和设备,该方法包括:根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设的阈值时触发的;根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;根据所述索引信息和所述压缩信息对所述小文件进行合并,通过本申请的技术方案,能够简化文件合并过程以及提高处理小文件的检索效率。
Description
技术领域
本申请涉及大数据处理技术领域,更具体地,涉及一种基于Hadoop的海量小文件处理方法和设备。
背景技术
利用大数据处理技术将Hadoop框架应用于海量数据,不仅能够为海量数据的存储提供载体,同时也为高效地处理数据提供了新的途径。Hadoop提供了一个分布式文件存储系统HDFS。HDFS可以用于保存基本上是顺序访问的海量数据,且提供了一种快速访问特定数据的机制。
然而,为处理大文件而设计的HDFS在处理图片、文件类型等小文件是会产生一些问题。一般小文件指的是大小小于10M的文件,如果系统中存在大量的这种小文件,将会极大地消耗NameNode的内存空间,从而影响整个HDFS集群的性能。海量小文件存储的重点是把小文件合并成一个大文件Big-File,减少小文件的个数,以降低NameNode对小文件维护的损耗,从而使NameNode高效的工作。
现有技术基于Hadoop处理小文件时,通过Sequencefile合并小文件,将多个小文件归档为一个以*.har结尾的归档文件(Har),来最大限度的减少NameNode的内是存消耗。然而,由于归档文件采用二级索引(Master-Index-File),造成检索速度慢,并且SequenceFile是二进制文件格式,文件合并过程复杂,并且文件合并后,不便于查看。
因此,如何提高基于Hadoop处理小文件时的检索效率并简化文件合并过程,是目前有待解决的技术问题。
发明内容
本发明提供一种基于Hadoop的海量小文件处理方法,用以解决现有技术中海量小文件合并过程复杂以及对小文件的检索效率低下不易操作的技术问题,该方法包括:
根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的;
根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息;
根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;
根据所述索引信息和所述压缩信息对所述小文件进行合并。
优选地,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息,具体为:
基于所述预设压缩方式对所述小文件进行压缩;
根据所述压缩的结果确定所述小文件的压缩长度及压缩后的内容;
基于所述预设压缩方式、所述压缩后长度及所述压缩后内容确定所述小文件在所述大文件中的存储值,并将所述存储值确定为所述压缩信息。
优选地,根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,具体为:
根据所述合并请求确定所述大文件的大文件名称和所述索引文件的索引文件名称;
根据所述大文件名称和所述索引文件名称判断所述预设合并路径中是否存在所述大文件和所述索引文件;
若是,打开所述大文件和所述索引文件;
若否,基于所述预设合并路径新建所述大文件和所述索引文件并打开。
优选地,根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,具体为:
基于所述预设合并路径确定所述小文件的小文件名称;
根据所述小文件名称和所述大文件末尾的指针值确定所述索引信息。
优选地,所述方法还包括:
当接受到用户发送的文件检索请求时,基于所述文件检索请求获取待检索文件对应的目标小文件名称;
根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值;
根据所述目标指针值和所述大文件获取所述待检索文件。
优选地,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于字符串划分操作确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
优选地,基于字符串划分操作从当前行信息中分别获取当前行的小文件名称和当前行的指针值;
若所述目标小文件名称与所述当前行的小文件名称匹配,将所述当前行信息确定为所述匹配行信息;
若所述目标小文件名称与所述当前行的小文件名称不匹配,将所述当前行的下一行作为新的当前行,并基于按行读取操作获取新的当前行信息,直至获取与所述目标小文件名称匹配的当前行的小文件名称,或直至读取完所述索引文件的所有行信息;
若读取完所述索引文件的所有行信息后仍未获取与所述目标小文件名称匹配的当前行的小文件名称,确定检索失败。
优选地,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作流程获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于正则表达式确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
优选地,根据所述目标指针值和所述大文件获取所述待检索文件,具体为:
基于所述目标指针值确定所述待检索文件在所述大文件中的存储位置;
基于所述存储位置获取所述待检索文件的压缩信息;
根据所述待检索文件的压缩信息进行解压缩后获取所述待检索文件。
相应的,本发明还提出了一种基于Hadoop的海量小文件处理设备,所述设备包括:
获取模块,用于根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的;
第一确定模块,用于根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息;
第二确定模块,用于根据所述小文件的预设压缩方式确定所述小文件在所述索引文件中的索引信息;
合并模块,用于根据所述索引信息和所述压缩信息对所述小文件进行合并。
与现有技术相比,本发明具备以下有益效果:
本发明公开了一种基于Hadoop的海量小文件处理方法和设备,根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设的阈值时触发的;根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;根据所述索引信息和所述压缩信息对所述小文件进行合并,通过本申请的技术方案,能够简化文件合并过程以及提高处理小文件的检索效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了本发明实施例提出的一种基于Hadoop的海量小文件处理方法的流程示意图;
图2示出了本发明另一实施例提出的一种基于Hadoop的海量小文件处理方法的流程示意图;
图3示出了本发明又一实施例提出的一种基于Hadoop的海量小文件处理方法的流程示意图;
图4示出了本发明实施例提出的一种基于Hadoop的海量小文件处理设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
如背景技术所述,现有技术中在对海量小文件进行处理时,一般采用的是通过Sequencefile合并小文件,但是,由于归档文件采用的是二级索引,会造成检索速度慢效率低下,并且该合并方式是二进制文件格式,文件合并过程复杂。
为解决上述问题,本申请实施例提出了一种基于Hadoop的海量小文件处理方法,通过根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件;根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;根据所述索引信息和所述压缩信息对所述小文件进行合并,通过本申请的技术方案,能够简化文件合并过程以及提高处理小文件的检索效率。
如图1所示本发明实施例提出的一种基于Hadoop的海量小文件处理方法的流程示意图,该方法包括以下步骤:
步骤S101、根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的。
具体的,在预设的合并路径中,当小文件的数量到达一个预设的阈值时,就会触发文件合并请求,为达到这一技术效果,可以配置文件合并监听器(File Merger Listener)来对合并路径进行监听,然后根据文件合并请求和合并路径获取与文件合并请求对应的大文件和索引文件。
为了更好的确定大文件和索引文件,在本申请优选的实施例中,根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,具体为:
根据所述合并请求确定所述大文件的大文件名称和所述索引文件的索引文件名称;
根据所述大文件名称和所述索引文件名称判断所述预设合并路径中是否存在所述大文件和所述索引文件;
若是,打开所述大文件和所述索引文件;
若否,基于所述预设合并路径新建所述大文件和所述索引文件并打开。
具体的,首先根据触发的合并请求来确定对应的大文件名称和索引文件的索引文件名称,该大文件名称和索引文件名称可以为预先设置的对应名称,然后根据确定的大文件名称和索引文件名称来判断合并路径中是否存在该大文件和索引文件,若是存在则打开对应的大文件和索引文件,若是不存在则在合并路径中新建对应名称的大文件和索引文件并打开这两个文件。
本领域技术人员可灵活设置不同的对应大文件和索引文件的名称,并根据实际情况决定一条或多条或优先级的合并路径,这并不影响本申请的保护范围。
步骤S102、根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息。
具体的,在小文件合并至大文件中后,若是需要某个小文件的数据,则需要在合并后的大文件中找到需要的小文件,因此,在合并时,需要根据小文件和大文件确定该小文件在索引文件中索引信息。
为了更准确的确定小文件的索引信息,在本申请优选的实施例中,根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,具体为:
基于所述预设合并路径确定所述小文件的小文件名称;
根据所述小文件名称和所述大文件末尾的指针值确定所述索引信息。
如上所述,在小文件合并至大文件中时,大文件中的末尾会有一个指针以及指针对应的指针值,首先根据合并路径来确定小文件的名称,然后根据该小文件名称和大文件中末尾指针的指针值来确定索引信息。
步骤S103、根据所述小文件的预设方式确定所述小文件在所述大文件中的压缩信息。
具体的,小文件在合并至大文件中时,是压缩合并至大文件中,因此需要确定小文件在大文件中的压缩信息。
为了准确的确定小文件的压缩信息,在本申请优选的实施例中,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息,具体为:
基于所述预设压缩方式对所述小文件进行压缩;
根据所述压缩的结果确定所述小文件的压缩后长度及压缩后内容;
基于所述预设压缩方式、所述压缩后长度及所述压缩后内容确定所述小文件在所述大文件中的存储值,并将所述存储值确定为所述压缩信息
具体的,在触发文件合并请求后,针对不同类型的小文件可以设置不同的压缩方式以保证最好的压缩率,在将小文件进行压缩后获取小文件压缩后的长度以及内容,并将对应的压缩方式和压缩后长度以及压缩后内容组合成该小文件在大文件中的存储值,以该存储值作为压缩信息。
需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案其他将小文件压缩并获取压缩信息的方式均属于本申请的保护范围。
步骤S104、根据所述索引信息和所述压缩信息对所述小文件进行合并。
具体的,在确定小文件的索引信息和压缩信息后便将小文件进行合并,将小文件名称和索引信息写入至索引文件中,将压缩信息及压缩后的小文件写入大文件中,存储的小文件索引信息和压缩信息会使后续的检索查看小文件提供极大的便利。
为了更加快捷的对小文件进行检索,在本申请优选的实施例中,所述方法包括:
当接收到用户发送的文件检索请求时,基于所述文件检索请求获取待检索文件对应的目标小文件名称;
根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值;
根据所述目标指针值和所述大文件获取所述待检索文件。
具体的,在接收到文件检索请求时,会从文件检索请求中获取待检索文件对应的目标小文件名称,而索引文件中存储有小文件名称和小文件名称对应的指针值,因此,可以根据目标小文件名称和索引文件确定目标小文件的指针值,也即待检索文件对应的目标指针值,再根据该目标指针值和大文件从而获取待检索文件。
为了更方便的确定目标指针值,在本申请优选的实施例中,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于字符串划分操作确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
具体的,使用Java中的管道流打开索引文件,对打开的索引文件执行按行读取操作以便获得索引文件的行信息,该行信息包括了小文件名称和指针值,然后根据字符串划分操作确定和目标小文件匹配的匹配行信息,并根据匹配行信息中的指针值确定为目标小文件对应的目标指针值。
为了更准确的确定匹配行信息,在本申请优选的实施例中,基于字符串划分操作确定与所述目标小文件名称匹配的匹配行信息,具体为:
基于字符串划分操作从当前行信息中分别获取当前行的小文件名称和当前行的指针值;
若所述目标小文件名称与所述当前行的小文件名称匹配,将所述当前行信息确定为所述匹配行信息;
若所述目标小文件名称与所述当前行的小文件名称不匹配,将所述当前行的下一行作为新的当前行,并基于按行读取操作获取新的当前行信息,直至获取与所述目标小文件名称匹配的当前行的小文件名称,或直至读取完所述索引文件的所有行信息;
若读取完所述索引文件的所有行信息后仍未获取与所述目标小文件名称匹配的当前行的小文件名称,确定检索失败。
具体的,在对索引文件进行行信息匹配时,会通过字符串划分操作获取当前行的小文件名称和当前行的指针值,并对获取到的小文件名称和目标小文件名称进行比对,若是比对成功,则确定当前行信息即为目标小文件名称的匹配行信息,若是比对不成功,则将下一行信息作为当前行信息继续进行字符串划分操作,直到比对成功确定出匹配行信息,若是索引文件中所有行信息均比对完但仍未匹配到对应的行信息,则直接确定检索失败。
此外,为了准确匹配行信息,在本申请优选实施例中还提供了一种确定匹配行信息的替代方式,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于正则表达式确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
具体的,对索引文件中行信息进行匹配还可采用正则表达式的匹配机制来对索引文件中的行信息进行匹配,正则表达式通常是被用来检索、替换符合某个模式(规则)的文本。
需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他根据目标小文件名称来确定索引文件中的对应的匹配行信息的方式均属于本申请的保护范围。
为了更加快捷的获取待检索文件,在本申请优选的实施例中,根据所述目标指针值和所述大文件获取所述待检索文件,具体为:
基于所述目标指针值确定所述待检索文件在所述大文件中的存储位置;
基于所述存储位置获取所述待检索文件的压缩信息;
根据所述待检索文件的压缩信息进行解压缩后获取所述待检索文件。
具体的,根据匹配行信息可以得出目标小文件的目标指针值,并通过目标指针值可以确定目标小文件也即待检索文件在大文件中的存储位置,根据该存储位置找到待检索文件的压缩信息并对其进行解压缩后获取该待检索文件。
需要说明的是,以上优选实施例的方案仅为本申请所提出的一种具体实现方案,其他根据索引文件来确定待检索文件在大文件中位置的方式均属于本申请的保护范围。
通过应用以上技术方案,根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设的阈值时触发的;根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;根据所述索引信息和所述压缩信息对所述小文件进行合并,通过本申请的技术方案,能够简化文件合并过程以及提高处理小文件的检索效率。
为了进一步阐述本发明的技术思想,现结合具体的小文件合并应用场景,对本发明的技术方案进行说明。
本发明实施例提出来一种基于Hadoop的海量小文件处理方法,通过根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设的阈值时触发的;根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;根据所述索引信息和所述压缩信息对所述小文件进行合并,通过本申请的技术方案,能够简化文件合并过程。
需要说明的是,本申请具体实施例的技术方案是基于Hadoop实现的,HadoopArchive俗称Hadoop归档文件,文件以*.har结尾,归档便是将多个小文件归档为一个文件,归档文件中包含元数据信息和小文件内容,即从一定程度上将Namenode管理的元数据信息下沉到Datanode上的归档文件中,避免元数据的膨胀。
如图2所示,上述方法具体步骤如下:
步骤S201、触发文件合并请求。
具体的,首先设置一个文件合并监听器(File Merger Listener)并设置一个文件合并配置项,配置项主要包含文件合并最小触发数量(file.merge.min.sum)、文件一次合并最大数量(file.merge.max.sum)和文件合并的路径(file.merge.path)。
文件合并监听器通过扫描配置项,获取监听的合并路径以及最小触发数量,当合并路径中小文件的数量满足最小触发数量时,触发合并请求,该合并请求为监听器发起,然后交由文件合并线程(File Merge Thread)进行处理。
步骤S202、处理小文件。
具体的,设置合并所需要的大文件名称为Big-File,索引文件名称为Index-File,检查文件合并路径中是否存在该大文件和索引文件,若存在则追加打开,若不存在则在当前路径下新建该两个文件并打开。
获取路径下的小文件名称,以及此时大文件中的文件末尾指针的值,并将小文件的文件内容按照指定的压缩方式进行压缩,压缩方式不限与一种,可根据文件的不同类型选择最优压缩方式进行压缩。
需要说明的是,本申请具体实施例中关于索引文件和大文件的存储方式是采用的NP-CLV(Name Point Compress Length Value)格式,表示对应的文件所在存储文件中的指针位置、压缩类型、文件长度、以及文件内容的存储方式。
其中,海量小文件存储的重点是把小文件合并成一个大文件Big-File,减少小文件的个数,以降低NameNode对小文件维护的损耗,在对索引文件进行设置时,采用NP-CLV中的NP格式,为一级索引,在一堆小文件合并成大文件时,不仅会生成一个存储内容的大文件Big-File,还会生成大文件的索引文件Index-File,其存储的内容为文件全名称(包括文件后缀名称),和准备写入大文件中的位置P,格式如下:
Xxxx-FileName.txt\1P
文件名称和指针P值之间用不可见字符\1分隔(按行存储)
小文件进行压缩后会得到一个对应的CLV值,因为本申请具体实施例中文件内容的存储是采用NP-CLV中的CLV存储方式,其中C表示压缩类型,默认为Gzip压缩方式,L表示使用C压缩方式后的文件长度,V则表示的是对应压缩后的文件内容。
将得到的小文件名称和指针值写入至索引文件中,同时将CLV的值写入值合并的大文件中。
步骤S203、完成小文件合并。
通过应用以上技术方案,设置监听器监听合并路径,对满足最小数量的小文件进行压缩,并得到小文件名称、指针值和CLV值,将小文件名称和指针值写入索引文件,将CLV值写入大文件,能够快速的对小文件进行合并,简化小文件合并的过程。
为了进一步阐述本发明的技术思想,现结合具体的小文件检索的应用场景,对本发明的技术方案进行说明。
本发明实施例提出了一种基于Hadoop的海量小文件处理方法,通过对索引文件的行信息进行匹配,根据匹配的行信息确定目标指针值,再根据目标指针值确定待检索文件在大文件中的具体位置,解决现有技术中对小文件不方便检索以及检索效率低下的问题。
如图3所示,上述方法的具体步骤如下:
步骤S301、接收文件检索请求。
具体的,在接收到文件检索请求后,获取文件检索请求中的待检索文件也即目标小文件,然后使用Java中的管道输入流PipedInputStream打开索引文件Index-File,并执行按行读取操作,获取行信息line。
步骤S302、匹配行信息。
具体的,由于行信息是由文件名称\1指针值获取的,所以可以使用字符串的划分Split操作,从而获取文件名称和指针值,再进行文件名称和目标小文件名称的比对,若成功则执行步骤S303,若不成功则继续匹配下一行信息,当索引文件中所有行信息均不匹配成功则返回匹配失败信息,检索结束。
需要说明的是,在对索引文件中的行信息进行匹配时,还可采用正则表达式的匹配机制“(目标文件名称)\\1(指针值)”来进行相应的行信息匹配。
步骤S303、获取待检索文件。
具体的,当成功匹配到行信息时,获取行信息中指针值P,然后打开大文件Big-File,指针跳转到P的位置,确定目标小文件,该目标小文件即是待检索文件,并取出对应的CLV值,最后对内容V使用压缩方式C对应的解压缩方式得到原始数据。
与本申请实施例中的基于Hadoop的海量小文件处理方法相对应,本申请实施例还提出了一种基于Hadoop的海量小文件处理设备,如图4所示,所述设备包括:
获取模块401,用于根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的;
第一确定模块402,用于根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息;
第二确定模块403,用于根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;
合并模块404,用于根据所述索引信息和所述压缩信息对所述小文件进行合并。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不驱使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种基于Hadoop的海量小文件处理方法,其特征在于,所述方法包括:
根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的;
根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息;
根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;
根据所述索引信息和所述压缩信息对所述小文件进行合并。
2.如权利要求1所述的方法,其特征在于,根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息,具体为:
基于所述预设压缩方式对所述小文件进行压缩;
根据所述压缩的结果确定所述小文件的压缩后长度及压缩后内容;
基于所述预设压缩方式、所述压缩后长度及所述压缩后内容确定所述小文件在所述大文件中的存储值,并将所述存储值确定为所述压缩信息。
3.如权利要求1所述的方法,其特征在于,根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,具体为:
根据所述合并请求确定所述大文件的大文件名称和所述索引文件的索引文件名称;
根据所述大文件名称和所述索引文件名称判断所述预设合并路径中是否存在所述大文件和所述索引文件;
若是,打开所述大文件和所述索引文件;
若否,基于所述预设合并路径新建所述大文件和所述索引文件并打开。
4.如权利要求1所述的方法,其特征在于,根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息,具体为:
基于所述预设合并路径确定所述小文件的小文件名称;
根据所述小文件名称和所述大文件末尾的指针值确定所述索引信息。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
当接收到用户发送的文件检索请求时,基于所述文件检索请求获取待检索文件对应的目标小文件名称;
根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值;
根据所述目标指针值和所述大文件获取所述待检索文件。
6.如权利要求5所述的方法,其特征在于,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于字符串划分操作确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
7.如权利要求6所述的方法,其特征在于,基于字符串划分操作确定与所述目标小文件名称匹配的匹配行信息,具体为:
基于字符串划分操作从当前行信息中分别获取当前行的小文件名称和当前行的指针值;
若所述目标小文件名称与所述当前行的小文件名称匹配,将所述当前行信息确定为所述匹配行信息;
若所述目标小文件名称与所述当前行的小文件名称不匹配,将所述当前行的下一行作为新的当前行,并基于按行读取操作获取新的当前行信息,直至获取与所述目标小文件名称匹配的当前行的小文件名称,或直至读取完所述索引文件的所有行信息;
若读取完所述索引文件的所有行信息后仍未获取与所述目标小文件名称匹配的当前行的小文件名称,确定检索失败。
8.如权利要求5所述的方法,其特征在于,根据所述目标小文件名称和所述索引文件获取所述待检索文件对应的目标指针值,具体为:
基于按行读取操作获取所述索引文件的行信息,所述索引文件是基于Java中的管道输入流打开的,所述行信息中包括所述小文件名称和所述指针值;
基于正则表达式确定与所述目标小文件名称匹配的匹配行信息,并将所述匹配行信息中的指针值确定为所述目标指针值。
9.如权利要求5所述的方法,其特征在于,根据所述目标指针值和所述大文件获取所述待检索文件,具体为:
基于所述目标指针值确定所述待检索文件在所述大文件中的存储位置;
基于所述存储位置获取所述待检索文件的压缩信息;
根据所述待检索文件的压缩信息进行解压缩后获取所述待检索文件。
10.一种基于Hadoop的海量小文件处理设备,其特征在于,所述设备包括:
获取模块,用于根据文件合并请求和预设合并路径获取与文件合并请求对应的大文件和索引文件,所述文件合并请求是在所述预设合并路径中小文件的数量达到预设阈值时触发的;
第一确定模块,用于根据所述小文件和所述大文件确定所述小文件在所述索引文件中的索引信息;
第二确定模块,用于根据所述小文件的预设压缩方式确定所述小文件在所述大文件中的压缩信息;
合并模块,用于根据所述索引信息和所述压缩信息对所述小文件进行合并。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010313667.2A CN111538702A (zh) | 2020-04-20 | 2020-04-20 | 一种基于Hadoop的海量小文件处理方法和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010313667.2A CN111538702A (zh) | 2020-04-20 | 2020-04-20 | 一种基于Hadoop的海量小文件处理方法和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111538702A true CN111538702A (zh) | 2020-08-14 |
Family
ID=71979051
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010313667.2A Pending CN111538702A (zh) | 2020-04-20 | 2020-04-20 | 一种基于Hadoop的海量小文件处理方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111538702A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113946289A (zh) * | 2021-09-23 | 2022-01-18 | 南京医基云医疗数据研究院有限公司 | 基于Spark计算引擎的文件合并方法及装置、存储介质、设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108595567A (zh) * | 2018-04-13 | 2018-09-28 | 郑州云海信息技术有限公司 | 一种小文件的合并方法、装置、设备及可读存储介质 |
-
2020
- 2020-04-20 CN CN202010313667.2A patent/CN111538702A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018133762A1 (zh) * | 2017-01-17 | 2018-07-26 | 广州市动景计算机科技有限公司 | 文件合并方法和装置 |
CN108595567A (zh) * | 2018-04-13 | 2018-09-28 | 郑州云海信息技术有限公司 | 一种小文件的合并方法、装置、设备及可读存储介质 |
Non-Patent Citations (1)
Title |
---|
张海 等: "基于HDFS 的小文件存储与读取优化策略", 《计算机系统应用》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113946289A (zh) * | 2021-09-23 | 2022-01-18 | 南京医基云医疗数据研究院有限公司 | 基于Spark计算引擎的文件合并方法及装置、存储介质、设备 |
CN113946289B (zh) * | 2021-09-23 | 2023-03-31 | 南京医基云医疗数据研究院有限公司 | 基于Spark计算引擎的文件合并方法及装置、存储介质、设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11347787B2 (en) | Image retrieval method and apparatus, system, server, and storage medium | |
US9619512B2 (en) | Memory searching system and method, real-time searching system and method, and computer storage medium | |
US20170031948A1 (en) | File synchronization method, server, and terminal | |
CN107357843B (zh) | 基于数据流结构的海量网络数据查找方法 | |
CN113495903B (zh) | 电力时序数据库缓存方法、系统、设备及可读存储介质 | |
CN106844607B (zh) | 一种适用于非整型主键与空闲块合并的SQLite数据恢复方法 | |
CN103678694A (zh) | 视频资源的倒排索引文件建立方法及其系统 | |
WO2021237467A1 (zh) | 文件上传方法、文件下载方法和文件管理装置 | |
CN112311902B (zh) | 基于微服务的文件发送方法及装置 | |
CN105447166A (zh) | 一种基于关键字查找信息的方法及系统 | |
CN106874399B (zh) | 一种联网备份系统及备份方法 | |
CN113806301A (zh) | 数据同步方法、装置、服务器及存储介质 | |
CN108182198B (zh) | 存储先进控制器运行数据的控制装置和读取方法 | |
CN111416825A (zh) | 线程间无锁日志管理方法和系统、终端、存储介质 | |
CN112486918B (zh) | 文件处理方法、装置、设备及介质 | |
CN111538702A (zh) | 一种基于Hadoop的海量小文件处理方法和设备 | |
CN112463542B (zh) | 日志异常原因诊断方法、装置、计算机设备和存储介质 | |
US11755555B2 (en) | Storing an ordered associative array of pairs using an append-only storage medium | |
CN113609090A (zh) | 数据存储方法及装置、计算机可读存储介质、电子设备 | |
CN110825706A (zh) | 一种数据压缩的方法和相关设备 | |
CN113348450A (zh) | 一种车载数据存储方法及系统 | |
CN116760661A (zh) | 数据存储方法、装置、计算机设备、存储介质和程序产品 | |
CN110798222B (zh) | 一种数据压缩方法及装置 | |
CN111625500B (zh) | 文件快照方法及装置、电子设备和存储介质 | |
CN111597146B (zh) | 视频文件处理方法及装置、存储介质、电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |