CN106294374B - 小文件合并的方法和数据查询系统 - Google Patents

小文件合并的方法和数据查询系统 Download PDF

Info

Publication number
CN106294374B
CN106294374B CN201510250755.1A CN201510250755A CN106294374B CN 106294374 B CN106294374 B CN 106294374B CN 201510250755 A CN201510250755 A CN 201510250755A CN 106294374 B CN106294374 B CN 106294374B
Authority
CN
China
Prior art keywords
merging
small documents
combined
file
mapping table
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.)
Active
Application number
CN201510250755.1A
Other languages
English (en)
Other versions
CN106294374A (zh
Inventor
谢宁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Gridsum Technology Co Ltd
Original Assignee
Beijing Gridsum Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Gridsum Technology Co Ltd filed Critical Beijing Gridsum Technology Co Ltd
Priority to CN201510250755.1A priority Critical patent/CN106294374B/zh
Publication of CN106294374A publication Critical patent/CN106294374A/zh
Application granted granted Critical
Publication of CN106294374B publication Critical patent/CN106294374B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/11File system administration, e.g. details of archiving or snapshots
    • G06F16/113Details of archiving
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed 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

本发明公开了一种小文件合并的方法和数据查询系统。其中,该方法包括:数据查询系统接收客户端的合并请求;数据查询系统根据合并请求生成合并任务;以及数据查询系统将合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,数据合并进程对数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,数据合并进程为数据查询系统中的进程。本发明解决了存储合并小文件过程的中间临时结果所造成的消耗大量的I/O开销的技术问题。

Description

小文件合并的方法和数据查询系统
技术领域
本发明涉及数据库领域,具体而言,涉及一种小文件合并的方法和数据查询系统。
背景技术
在Hadoop中的分布式文件系统(Hadoop Distributed File System,简称为HDFS)中保存的数据文件,数据文件的地址信息会映射到命名节点(Namenode)的内存中,当客户端读取HDFS中的数据文件,客户端会先在Namenode内存中查找数据文件的地址信息,然后把对应的地址信息返回给客户端,客户端再通过返回的地址信息直接在Datanode上读取数据文件。当HDFS中数据的不断增加,文件数量变大,需要映射的地址信息也就增大,这就占用了大量Namenode的内存空间。在一个HDFS系统中如果存在大量的小文件,将会消耗大量的Namenode内存空间。例如,在一个生产集群中有大约60000000个小文件,这些小文件消耗了95%的Namenode的内存,但只占用了30%的存储空间。就造成了磁盘空间还没满,Namenode的内存空间就已经满了的结果。
在一个web日志分析系统中,由于web页面的推广力度不同,不同时段产生的日志量也不同,有时每个小时产生几GB的日志,有时只产生几KB的日志。这样在HDFS文件系统中就存在大量只有几KB大小的文件。白白占用大量的Namenode内存空间。
为了解决小文件占用过多的Namenode的内存的问题,目前合并HDFS小文件主要采用创建归档文件的方式,通过Hadoop archive–ArchiveName方式创建一个har文件。这种方式的执行原理是把合并过程转化成Mapreduce操作,Mapreduce是一个很耗时的过程。每次map操作之后都要把中间临时结果保存在本地磁盘中,然后供下一个map使用。这种har文件的存储方式如图1所示,这就导致在文件合并的过程中消耗大量的I/O开销。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种小文件合并的方法和数据查询系统,以至少解决存储合并小文件过程的中间临时结果所造成的消耗大量的I/O开销的技术问题。
根据本发明实施例的一个方面,提供了一种小文件合并的方法,包括:数据查询系统接收客户端的合并请求;所述数据查询系统根据所述合并请求生成合并任务;以及所述数据查询系统将所述合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,所述数据合并进程对所述数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,所述数据合并进程为所述数据查询系统中的进程。
进一步地,所述数据合并进程对所述数据存放节点中存放的小文件进行合并包括:所述数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,其中,所述输入映射表映射的输入目录存储有所述待合并小文件,所述输出映射表映射的输出目录中用于存储所述合并后的文件;按照所述合并任务从所述输入映射表中选择一个或多个待合并小文件;将选择的待合并小文件插入到所述输出映射表中合并为大文件,其中,所述大文件为包含两个以上待合并小文件的文件内容的文件。
进一步地,所述数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表包括:根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表;将选择的待合并小文件插入到所述输出映射表中合并为大文件包括:将从所述第一输入映射表中选择的待合并小文件和从所述第二输入映射表中选择的待合并小文件插入到所述输出映射表,合并为一个大文件。
进一步地,所述合并请求中携带有文件合并后类型信息,则将选择的待合并小文件插入到所述输出映射表中合并为大文件包括:获取所述合并请求所指示的待合并小文件的合并前类型和所述合并后类型信息;在所述选择的待合并小文件的合并前类型与所述合并后类型信息所指示的合并后类型相同时,将所述选择的待合并小文件插入到所述输入映射表中合并为所述大文件;以及在所述选择的待合并小文件的合并前类型与所述合并后的文件的所述合并后类型不同时,将所述选择的待合并小文件的合并前类型转换为所述合并后类型,并且将转换后的待合并小文件插入到所述输入映射表中合并为所述大文件。
进一步地,所述合并前类型包括二进制文件的类型和列示存储文件的类型。
进一步地,在将选择的待合并小文件插入到所述输出映射表中合并为大文件之后,所述方法还包括:按照所述输出映射表更新所述数据库中命名节点存储的地址信息。
进一步地,所述合并请求中还携带有文件合并后的压缩格式信息,则在所述数据合并进程对所述数据存放节点中存放的小文件进行合并之后,所述方法还包括:按照所述压缩格式信息所指示的压缩格式对所述合并后的文件进行压缩。
根据本发明实施例的另一方面,还提供了一种数据查询系统,包括:接收单元,用于接收客户端的合并请求;生成单元,用于根据所述合并请求生成合并任务;以及分发单元,用于将所述合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,所述数据合并进程对所述数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,所述数据合并进程为所述数据查询系统中的进程。
进一步地,所述分发单元包括:创建模块,用于创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,其中,所述输入映射表映射的输入目录存储有所述待合并小文件,所述输出映射表映射的输出目录中用于存储所述合并后的文件;选择模块,用于按照所述合并任务从所述输入映射表中选择两个以上待合并小文件;合并模块,用于将选择的待合并小文件插入到所述输出映射表中合并为大文件,其中,所述大文件为包含两个以上待合并小文件的文件内容的文件。
进一步地,所述创建模块还用于根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表;所述合并模块还用于将从所述第一输入映射表中选择的待合并小文件和从所述第二输入映射表中选择的待合并小文件插入到所述输出映射表,合并为一个大文件。
进一步地,所述合并请求中携带有文件合并后类型信息,所述合并模块包括:获取子模块,用于获取所述合并请求所指示的待合并小文件的合并前类型和所述合并后类型信息;第一合并子模块,用于在所述选择的待合并小文件的合并前类型与所述合并后类型信息所指示的合并后类型相同时,将所述选择的待合并小文件插入到所述输入映射表中合并为所述大文件;以及第二合并子模块,用于在所述选择的待合并小文件的合并前类型与所述合并后的文件的所述合并后类型不同时,将所述选择的待合并小文件的合并前类型转换为所述合并后类型,并且将转换后的待合并小文件插入到所述输入映射表中合并为所述大文件。
进一步地,所述数据查询系统还包括:更新单元,用于在将选择的待合并小文件插入到所述输出映射表中合并为大文件之后,按照所述输出映射表更新所述数据库中命名节点存储的地址信息。
进一步地,所述数据查询系统还包括:压缩模块,用于在所述数据合并进程对所述数据存放节点中存放的小文件进行合并之后,按照所述合并请求所指示的压缩格式对所述合并后的文件进行压缩。
为了实现上述目的,根据本发明的另一方面,提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的小文件合并的方法。
为了实现上述目的,根据本发明的另一方面,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的小文件合并的方法。
在本发明实施例中,采用数据查询系统接收客户端的合并请求;数据查询系统根据合并请求生成合并任务;数据查询系统将合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,数据合并进程对数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,数据合并进程为数据查询系统中的进程。由于执行小文件合并任务的进程运行在HDFS系统的数据存放节点中,且该进程属于数据查询系统Impala的进程,因此,在Impala接收到客户端发送的合并请求后,能够快速启动执行合并的Impalad进程,降低了合并任务的启动时间,也就提高了合并小文件的合并效率。同时,由于Impalad进程合并时不需要存储中间结果文件,不需要反复调用存储在本地磁盘的中间结果文件,在减少本地磁盘占用的同时节省大量I/O开销,解决了存储合并小文件过程的中间临时结果所造成的消耗大量的I/O开销的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据现有技术的一种小文件合并的方法的示意图;
图2是根据本发明实施例的小文件合并的方法的流程图;
图3是根据本发明实施例的Impala的执行过程示意图;
图4是根据本发明优选实施例的小文件合并的方法的示意图;以及
图5是根据本发明实施例的小文件合并的数据查询系统的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
名词解释:
HDFS:(Hadoop Distributed File System)是Hadoop中的分布式文件系统。
Impala:是一个数据查询系统,通过SQL语句,查询存储在HDFS上的海量数据。
Namenode:命名节点,HDFS存放数据文件的地址信息保存在Namenode中。当Namenode启动时,会把所有的地址信息加载到内存中。
Datanode:数据节点,存放HDFS数据文件的节点。
Impalad:与Datanode运行在同一节点上,由Impalad进程表示,它接收客户端的合并请求,生成执行计划,执行操作。
本发明提供了一种小文件合并的方法。小文件是HDFS中文件占用存储空间小于HDFS设定块的大小的文件,是未进行合并处理的原始文件。该小文件合并方法可以对HDFS系统中的小文件进行合并,减少Namenode的内存占用。同时,该小文件合并方法利用Impala中的Impalad进程在HDFS数据文件的节点Datanode中直接对小文件进行合并,提高了合并进程的启动效率,还避免了现有技术在合并小文件的过程中消耗大量的I/O开销。
以下结合图2至图4对本发明实施例进行说明。
图2是根据本发明实施例的小文件合并的方法的流程图。如图2所示,该小文件合并的方法包括:
步骤S202,数据查询系统接收客户端的合并请求。
步骤S204,数据查询系统根据合并请求生成合并任务。
步骤S206,数据查询系统将合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,数据合并进程对数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,数据合并进程为数据查询系统中的进程。
客户端向Impala中提交数据处理请求,即数据查询系统接收客户端的合并请求。Impala根据合并请求生成合并任务,并把合并任务分发到运行在Datanode上的Impalad进程中。Impalad直接读取本地Datanode上存储的数据,以对小文件进行合并处理。
由于执行小文件合并任务的进程运行在HDFS系统的数据存放节点中,且该进程属于数据查询系统Impala的进程,因此,在Impala接收到客户端发送的合并请求后,能够快速启动执行合并的Impalad进程,降低了合并任务的启动时间,也就提高了合并小文件的合并效率。同时,由于Impalad进程合并时不需要存储中间结果文件,不需要反复调用存储在本地磁盘的中间结果文件,在减少本地磁盘占用的同时节省大量I/O开销。
可选地,数据合并进程对数据存放节点中存放的小文件进行合并包括:数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,其中,输入映射表映射的输入目录存储有待合并小文件,输出映射表映射的输出目录中用于存储合并后的文件。按照合并任务从输入映射表中选择两个以上待合并小文件。将选择的待合并小文件插入到输出映射表中合并为大文件,其中,大文件为包含两个以上待合并小文件的文件内容的文件。
输入映射表对应待合并小文件,根据输入映射表可以确定待合并小文件的名称和存储地址;输出映射表对应合并后的大文件,通过输出映射表可以查找到合并后的大文件的名称和存储地址。在合并过程中,通过将输入映射表中的待合并小文件插入到输出映射表中,完成对一个或多个待合并小文件的合并。其中,合并后得到的大文件包括被合并的一个或者多个待合并小文件的文件内容。即本实施例所提供的合并方法并不是将多个待合并小文件打包成为一个包括多个小文件的集合,而是将多个待合并的小文件合并成一个大文件,该大文件包括多个小文件的文件内容。同时,输出映射表包括合并后得到的大文件的名称和地址信息,即减少了多个小文件的内存空间的占用。
具体地,在进行文件合并时,可以对多个不同类型的小文件进行合并。在对多个不同类型的小文件进行合并时,为每个类型的小文件建立一个输入映射表,每个输入映射表只存储相同类型的小文件。即数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表包括:根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表。将选择的待合并小文件插入到输出映射表中,得到大文件包括:将从第一输入映射表中选择的待合并小文件和从第二输入映射表中选择的待合并小文件插入到输出映射表,合并为一个大文件。
第一类型的待合并小文件和第二类型的待合并小文件分别插入到输出映射表中,从而完成多个小文件的合并。其中,在合并时可以是同一类型的待合并小文件合并为一个文件块,还可以是不同类型的待合并小文件合并为一个文件块。一个或多个输入映射表对应的小文件可以合并为一个文件块,一个输入映射表对应的小文件也可以存储在多个文件块中。文件块的大小可以根据采用默认的文件块的大小,即与HDFS的文件块大小相同,还可以对每个文件块的大小进行单独设置。
图3是根据本发明实施例的Impala的执行过程示意图。如图所示,客户端提交任务到Impalad,在Impalad中生成执行计划,然后通过协调器把任务发送到执行引擎中,任务在执行引擎中执行,直接访问HDFS上的数据文件进行合并,把合并后的结果写入HDFS中。
在将同一类型的待合并小文件合并为一个文件块时,将该类型的待合并小文件插入到输出映射表中;在将不同类型的待合并小文件合并为一个文件块时,分别对不同类型的待合并小文件进行处理,然后再插入到输出映射表中。
在将选择的待合并小文件插入到输出映射表中合并为大文件时,还需要根据待合并小文件的合并前类型和合并后的文件的合并后类型进行文件的合并,即合并请求中携带有文件合并后类型信息,获取合并请求所指示的待合并小文件的合并前类型和合并后类型信息。在选择的待合并小文件的合并前类型与合并后类型信息所指示的合并后类型相同时,将选择的待合并小文件插入到输入映射表中合并为大文件。在选择的待合并小文件的合并前类型与合并后的文件的合并后类型不同时,将选择的待合并小文件的合并前类型转换为合并后类型,并且将转换后的待合并小文件插入到输入映射表中合并为大文件。
合并后的文件可以按照合并请求所指示的合并后类型进行存储,如果待合并小文件的合并前类型与合并后类型相同,则可以直接插入,如果不同,就需要对待合并小文件的合并前类型进行转换,以满足合并请求所指示的合并后类型的要求。合并前类型和合并后类型包括二进制文件的类型和列示存储文件的类型。其中,二进制文件的类型包括txt等,列示存储文件的类型包括avro文件格式,parquet文件格式,rcfile文件格式、orcfile文件格式等。
图4是根据本发明优选实施例的小文件合并方法的示意图。图4示出了第一输入映射表A1、第二输入映射表A2和输出映射表B。第一输入映射表A1中待合并小文件的合并前类型为txt,第二输入映射表A2中待合并小文件的合并前类型为avro。输出映射表B的指定合并后类型为avro。
(1)将第一输入映射表A1中的待合并小文件合并为一个文件块X,将第二输入映射表A2中的待合并小文件合并为另一个文件块Y。
第一输入映射表A1的待合并小文件的合并前类型与输出映射表的合并后类型不同,将第一输入映射表A1中的待合并小文件的类型txt转换为avro,然后将类型转换后的待合并小文件插入到输出映射表B中作为一个文件块X。
第二输入映射表A2的待合并小文件的合并前类型与输出映射表的合并后类型相同,直接将第二输入映射表A2中的待合并小文件插入到输出映射表B中作为另外一个文件块Y。
这样,第一输入映射表A1中的待合并小文件和第二输入映射表A2中的待合并小文件就分别合并到了映射表B中的两个文件块中,得到两个相同类型的大文件。
(2)将第一输入映射表A1中的待合并小文件和第二输入映射表A2中的待合并小文件合并为一个文件块。
将第一输入映射表A1中的待合并小文件的类型txt转换为avro,然后将类型转换后的待合并小文件插入到输出映射表B中作为一个文件块X。同时,将第二输入映射表A2中的待合并小文件也插入到文件块X中,也就是将两种不同类型的小文件合并到同一个文件块中。
可选地,在将选择的待合并小文件插入到输出映射表中合并为大文件之后,该方法还包括:按照输出映射表更新数据库中命名节点存储的地址信息。合并后的文件存储在输出映射表所对应的输出目录中,通过合并减少了存储的小文件的数量,相应的输出映射表存储的地址信息减少,那么更新后的命名节点存储的地址信息也减少,在存储地址信息和查找合并后的数据时也就减少了内存的占用。
可选地,合并请求中还携带有文件合并后的压缩格式信息,在数据合并进程对数据存放节点中存放的小文件进行合并之后,该方法还包括:按照合并请求所指示的压缩格式对合并后的文件进行压缩。对合并后的文件进行压缩能够减少文件占用的存储存储空间,压缩格式包括但不限于下述格式:gzip,snappy,bzip,lzo。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的小文件合并的方法。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的小文件合并的方法。
图5是根据本发明实施例的小文件合并数据查询系统的示意图。该数据查询系统包括:接收单元10、生成单元30和分发单元50。
接收单元10用于接收客户端的合并请求。
生成单元30用于根据合并请求生成合并任务。
分发单元50用于将合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,数据合并进程对数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,数据合并进程为数据查询系统中的进程。
客户端向Impala中提交数据处理请求,即数据查询系统接收客户端的合并请求。Impala根据合并请求生成合并任务,并把合并任务分发到运行在Datanode上的Impalad进程中。Impalad直接读取本地Datanode上存储的数据,以对小文件进行合并处理。
由于执行小文件合并任务的进程运行在HDFS系统的数据存放节点中,且该进程属于数据查询系统Impala的进程,因此,在Impala接收到客户端发送的合并请求后,能够快速启动执行合并的Impalad进程,降低了合并任务的启动时间,也就提高了合并小文件的合并效率。同时,由于Impalad进程合并时不需要存储中间结果文件,不需要反复调用存储在本地磁盘的中间结果文件,在减少本地磁盘占用的同时节省大量I/O开销。
可选地,分发单元包括:创建模块,用于创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,输入映射表映射的输入目录存储有待合并小文件,输出映射表映射的输出目录中用于存储合并后的文件。选择模块,用于按照合并任务从输入映射表中选择两个以上待合并小文件。合并模块,用于将选择的待合并小文件插入到输出映射表中合并为大文件,其中,大文件为包含两个以上待合并小文件的文件内容的文件。
输入映射表对应待合并小文件,根据输入映射表可以确定待合并小文件的名称和存储地址;输出映射表对应合并后的大文件,通过输出映射表可以查找到合并后的大文件的名称和存储地址。在合并过程中,通过将输入映射表中的待合并小文件插入到输出映射表中,完成对一个或多个待合并小文件的合并。其中,合并后得到的大文件包括被合并的一个或者多个待合并小文件的文件内容。即本实施例所提供的合并方法并不是将多个待合并小文件打包成为一个包括多个小文件的集合,而是将多个待合并的小文件合并成一个大文件,该大文件包括多个小文件的文件内容。同时,输出映射表包括合并后得到的大文件的名称和地址信息,即减少了多个小文件的内存空间的占用。
具体地,在进行文件合并时,可以对多个不同类型的小文件进行合并。在对多个不同类型的小文件进行合并时,为每个类型的小文件建立一个输入映射表,每个输入映射表只存储相同类型的小文件。即创建模块还用于根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表。合并模块还用于将从第一输入映射表中选择的待合并小文件和从第二输入映射表中选择的待合并小文件插入到输出映射表,合并为一个大文件。
第一类型的待合并小文件和第二类型的待合并小文件分别插入到输出映射表中,从而完成多个小文件的合并。其中,在合并时可以是同一类型的待合并小文件合并为一个文件块,还可以是不同类型的待合并小文件合并为一个文件块。一个或多个输入映射表对应的小文件可以合并为一个文件块,一个输入映射表对应的小文件也可以存储在多个文件块中。文件块的大小可以根据采用默认的文件块的大小,即与HDFS的文件块大小相同,还可以对每个文件块的大小进行单独设置。
在将同一类型的待合并小文件合并为一个文件块时,将该类型的待合并小文件插入到输出映射表中;在将不同类型的待合并小文件合并为一个文件块时,分别对不同类型的待合并小文件进行处理,然后再插入到输出映射表中。
在将选择的待合并小文件插入到输出映射表中合并为大文件时,还需要根据待合并小文件的合并前类型和合并后的文件的合并后类型进行文件的合并,即合并请求中携带有文件合并后类型信息,合并模块包括获取子模块,用于获取合并请求所指示的待合并小文件的合并前类型和合并后类型信息。第一合并子模块,用于在选择的待合并小文件的合并前类型与合并后类型信息所指示的合并后类型相同时,将选择的待合并小文件插入到输入映射表中合并为大文件。以及第二合并子模块,用于在选择的待合并小文件的合并前类型与合并后的文件的合并后类型不同时,将选择的待合并小文件的合并前类型转换为合并后类型,并且将转换后的待合并小文件插入到输入映射表中合并为大文件。
合并后的文件可以按照合并请求所指示的合并后类型进行存储,如果待合并小文件的合并前类型与合并后类型相同,则可以直接插入,如果不同,就需要对待合并小文件的合并前类型进行转换,以满足合并请求所指示的合并后类型的要求。合并前类型和合并后类型包括二进制文件的类型和列示存储文件的类型。其中,二进制文件的类型包括txt等,列示存储文件的类型包括avro文件格式,parquet文件格式,rcfile文件格式、orcfile文件格式等。
可选地,数据查询系统还包括:更新单元,用于在将选择的待合并小文件插入到输出映射表中合并为大文件之后,按照输出映射表更新数据库中命名节点存储的地址信息。合并后的文件存储在输出映射表所对应的输出目录中,通过合并减少了存储的小文件的数量,相应的输出映射表存储的地址信息减少,那么更新后的命名节点存储的地址信息也减少,在存储地址信息和查找合并后的数据时也就减少了内存的占用。
可选地,合并请求中还携带有文件合并后的压缩格式信息,该数据查询系统还包括:压缩模块,用于在数据合并进程对数据存放节点中存放的小文件进行合并之后,按照合并请求所指示的压缩格式对合并后的文件进行压缩。对合并后的文件进行压缩能够减少文件占用的存储存储空间,压缩格式包括但不限于下述格式:gzip,snappy,bzip,lzo。
需要说明的是,本发明提供的方法实施例在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的数据查询系统实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (13)

1.一种小文件合并的方法,其特征在于,包括:
数据查询系统接收客户端的合并请求;
所述数据查询系统根据所述合并请求生成合并任务;以及
所述数据查询系统将所述合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,所述数据合并进程对所述数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,所述数据合并进程为所述数据查询系统中的进程,
所述数据合并进程对所述数据存放节点中存放的小文件进行合并包括:所述数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,其中,所述输入映射表映射的输入目录存储有所述待合并小文件,所述输出映射表映射的输出目录中用于存储所述合并后的文件;按照所述合并任务从所述输入映射表中选择两个以上待合并小文件;将选择的待合并小文件插入到所述输出映射表中合并为大文件,其中,所述大文件为包含两个以上待合并小文件的文件内容的文件。
2.根据权利要求1所述的方法,其特征在于,
所述数据合并进程创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表包括:根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表;
将选择的待合并小文件插入到所述输出映射表中合并为大文件包括:将从所述第一输入映射表中选择的待合并小文件和从所述第二输入映射表中选择的待合并小文件插入到所述输出映射表,合并为一个大文件。
3.根据权利要求1或2所述的方法,其特征在于,所述合并请求中携带有文件合并后类型信息,则将选择的待合并小文件插入到所述输出映射表中合并为大文件包括:
获取所述合并请求所指示的待合并小文件的合并前类型和所述合并后类型信息;
在所述选择的待合并小文件的合并前类型与所述合并后类型信息所指示的合并后类型相同时,将所述选择的待合并小文件插入到所述输入映射表中合并为所述大文件;以及
在所述选择的待合并小文件的合并前类型与所述合并后的文件的所述合并后类型不同时,将所述选择的待合并小文件的合并前类型转换为所述合并后类型,并且将转换后的待合并小文件插入到所述输入映射表中合并为所述大文件。
4.根据权利要求3所述的方法,其特征在于,所述合并前类型包括二进制文件的类型和列示存储文件的类型。
5.根据权利要求1所述的方法,其特征在于,在将选择的待合并小文件插入到所述输出映射表中合并为大文件之后,所述方法还包括:
按照所述输出映射表更新所述数据库中命名节点存储的地址信息。
6.根据权利要求1所述的方法,其特征在于,所述合并请求中还携带有文件合并后的压缩格式信息,则在所述数据合并进程对所述数据存放节点中存放的小文件进行合并之后,所述方法还包括:
按照所述压缩格式信息所指示的压缩格式对所述合并后的文件进行压缩。
7.一种数据查询系统,其特征在于,包括:
接收单元,用于接收客户端的合并请求;
生成单元,用于根据所述合并请求生成合并任务;以及
分发单元,用于将所述合并任务分发到在数据库的数据存放节点中运行的数据合并进程中,其中,所述数据合并进程对所述数据存放节点中存放的小文件进行合并,得到合并后的文件,其中,所述数据合并进程为所述数据查询系统中的进程,
所述分发单元包括:创建模块,用于创建与待合并小文件具有映射关系的输入映射表和用于建立与合并后的文件的映射关系的输出映射表,其中,所述输入映射表映射的输入目录存储有所述待合并小文件,所述输出映射表映射的输出目录中用于存储所述合并后的文件;选择模块,用于按照所述合并任务从所述输入映射表中选择两个以上待合并小文件;合并模块,用于将选择的待合并小文件插入到所述输出映射表中合并为大文件,其中,所述大文件为包含两个以上待合并小文件的文件内容的文件。
8.根据权利要求7所述的数据查询系统,其特征在于,
所述创建模块还用于根据第一类型的待合并小文件创建第一输入映射表,根据第二类型的待合并小文件创建第二输入映射表;
所述合并模块还用于将从所述第一输入映射表中选择的待合并小文件和从所述第二输入映射表中选择的待合并小文件插入到所述输出映射表,合并为一个大文件。
9.根据权利要求7或8所述的数据查询系统,其特征在于,所述合并请求中携带有文件合并后类型信息,所述合并模块包括:
获取子模块,用于获取所述合并请求所指示的待合并小文件的合并前类型和所述合并后类型信息;
第一合并子模块,用于在所述选择的待合并小文件的合并前类型与所述合并后类型信息所指示的合并后类型相同时,将所述选择的待合并小文件插入到所述输入映射表中合并为所述大文件;以及
第二合并子模块,用于在所述选择的待合并小文件的合并前类型与所述合并后的文件的所述合并后类型不同时,将所述选择的待合并小文件的合并前类型转换为所述合并后类型,并且将转换后的待合并小文件插入到所述输入映射表中合并为所述大文件。
10.根据权利要求7所述的数据查询系统,其特征在于,所述数据查询系统还包括:
更新单元,用于在将选择的待合并小文件插入到所述输出映射表中合并为大文件之后,按照所述输出映射表更新所述数据库中命名节点存储的地址信息。
11.根据权利要求7所述的数据查询系统,其特征在于,所述数据查询系统还包括:
压缩模块,用于在所述数据合并进程对所述数据存放节点中存放的小文件进行合并之后,按照所述合并请求所指示的压缩格式对所述合并后的文件进行压缩。
12.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至权利要求6中任意一项所述的小文件合并的方法。
13.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至权利要求6中任意一项所述的小文件合并的方法。
CN201510250755.1A 2015-05-15 2015-05-15 小文件合并的方法和数据查询系统 Active CN106294374B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510250755.1A CN106294374B (zh) 2015-05-15 2015-05-15 小文件合并的方法和数据查询系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510250755.1A CN106294374B (zh) 2015-05-15 2015-05-15 小文件合并的方法和数据查询系统

Publications (2)

Publication Number Publication Date
CN106294374A CN106294374A (zh) 2017-01-04
CN106294374B true CN106294374B (zh) 2019-06-04

Family

ID=57631919

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510250755.1A Active CN106294374B (zh) 2015-05-15 2015-05-15 小文件合并的方法和数据查询系统

Country Status (1)

Country Link
CN (1) CN106294374B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107193940A (zh) * 2017-05-19 2017-09-22 成都四象联创科技有限公司 大数据优化分析方法
CN107194001B (zh) * 2017-06-14 2019-11-12 网宿科技股份有限公司 一种列式存储格式文件快速合并方法及其系统
CN108009274A (zh) * 2017-12-19 2018-05-08 维沃移动通信有限公司 文件合并方法及移动终端
CN108804566B (zh) * 2018-05-22 2019-11-29 广东技术师范大学 一种基于Hadoop的海量小文件读取方法
CN110659111A (zh) * 2018-06-29 2020-01-07 北京国双科技有限公司 数据处理方法及系统
CN109240999A (zh) * 2018-08-24 2019-01-18 浪潮电子信息产业股份有限公司 一种基于小文件的自动化聚合打包方法及系统
CN109189763A (zh) * 2018-09-17 2019-01-11 北京锐安科技有限公司 一种数据存储方法、装置、服务器及存储介质
CN111061765B (zh) * 2019-11-25 2022-09-06 福建天泉教育科技有限公司 合并预取数据的方法、存储介质
CN111930684A (zh) * 2020-07-28 2020-11-13 苏州亿歌网络科技有限公司 基于hdfs的小文件处理方法、装置、设备及存储介质
CN112214453B (zh) * 2020-09-14 2021-10-01 上海微亿智造科技有限公司 大规模工业数据压缩存储方法、系统及介质
TWI805349B (zh) * 2022-05-05 2023-06-11 財團法人國家實驗研究院 於可程式化交換器網路上之資料整合系統及其方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101888404A (zh) * 2010-05-27 2010-11-17 北京开心人信息技术有限公司 一种移动设备数据更新的方法及装置
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN103559229A (zh) * 2013-10-22 2014-02-05 西安电子科技大学 基于MapFile的小文件管理服务SFMS系统及其使用方法
CN103577123A (zh) * 2013-11-12 2014-02-12 河海大学 一种基于hdfs的小文件优化存储方法
CN103856567A (zh) * 2014-03-26 2014-06-11 西安电子科技大学 基于Hadoop分布式文件系统的小文件存储方法
CN104391930A (zh) * 2014-11-21 2015-03-04 用友软件股份有限公司 分布式文件存储装置和方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101888404A (zh) * 2010-05-27 2010-11-17 北京开心人信息技术有限公司 一种移动设备数据更新的方法及装置
CN103279474A (zh) * 2013-04-10 2013-09-04 深圳康佳通信科技有限公司 一种视频文件索引方法及系统
CN103559229A (zh) * 2013-10-22 2014-02-05 西安电子科技大学 基于MapFile的小文件管理服务SFMS系统及其使用方法
CN103577123A (zh) * 2013-11-12 2014-02-12 河海大学 一种基于hdfs的小文件优化存储方法
CN103856567A (zh) * 2014-03-26 2014-06-11 西安电子科技大学 基于Hadoop分布式文件系统的小文件存储方法
CN104391930A (zh) * 2014-11-21 2015-03-04 用友软件股份有限公司 分布式文件存储装置和方法

Also Published As

Publication number Publication date
CN106294374A (zh) 2017-01-04

Similar Documents

Publication Publication Date Title
CN106294374B (zh) 小文件合并的方法和数据查询系统
CN109299102B (zh) 一种基于Elastcisearch的HBase二级索引系统及方法
CN104536959B (zh) 一种Hadoop存取海量小文件的优化方法
US20180239800A1 (en) Data query method and apparatus
EP2924594A1 (en) Data encoding and corresponding data structure in a column-store database
CN105824957A (zh) 分布式内存列式数据库的查询引擎系统及查询方法
CN101576927B (zh) 移动终端基于索引的信息检索方法
CN109299157B (zh) 一种分布式大单表的数据导出方法及装置
JP6928677B2 (ja) オンライン分析処理を行うためのデータ処理方法及び装置
CN107506383B (zh) 一种审计数据处理方法和计算机设备
CN108509501A (zh) 一种查询处理方法、服务器及计算机可读存储介质
CN102279849A (zh) 一种大数据查询的方法及系统
CN104731945A (zh) 一种基于HBase的全文检索方法及装置
US8015195B2 (en) Modifying entry names in directory server
CN109359142A (zh) 一种数据处理方法、数据处理装置、计算机设备及可读存储介质
CN110109924A (zh) 检索方法及装置
CN105718561A (zh) 一种特定分布式数据存储文件结构去冗余构造方法及系统
CN114116827B (zh) 一种用户画像数据的查询系统及方法
CN105912696A (zh) 一种基于对数归并的dns索引创建方法及查询方法
Bugiotti et al. SPARQL Query Processing in the Cloud.
CN112084199A (zh) 一种基于场景的通用参数维护方法及装置
CN116595106A (zh) 一种用户分群方法、设备及存储介质
CN116049193A (zh) 数据存储方法及装置
CN115983965A (zh) 一种实现银行风险策略血缘分析的方法和系统
CN115577085A (zh) 表格问答任务的处理方法及设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing

Applicant after: Beijing Guoshuang Technology Co.,Ltd.

Address before: 100086 Cuigong Hotel, 76 Zhichun Road, Shuangyushu District, Haidian District, Beijing

Applicant before: Beijing Guoshuang Technology Co.,Ltd.

CB02 Change of applicant information
GR01 Patent grant
GR01 Patent grant