离线小文件处理方法及装置与流程

文档序号:13446457阅读:295来源:国知局
离线小文件处理方法及装置与流程

本发明实施例涉及分布式计算技术领域,尤其涉及一种离线小文件处理方法及装置。



背景技术:

对于大数据的离线分析工作,采取将流式数据转换成parquet列式存储格式文件方式,并结合spark-sql等技术手段进行离线分析。其中实时接入的流式数据,会从kafka上获取并实时转换成parquet文件,采用hdfs文件系统方式进行存储,最后作为离线分析工具的源文件。hadoop分布式文件系统(hadoopdistributedfilesystem,hdfs)被设计成适合运行在通用硬件(commodityhardware)上的分布式文件系统,具有高度容错、高吞吐量等特性,非常适合大规模数据集上的应用。但hadoop的设计之初主要是面向流式处理的,对于处理大量远小于blocksize值的小文件时候,由于设计机制的问题,会出现响应速度大幅下降,严重影响性能,甚至导致无法正常运行的现象。由于数据来自各厂商、分光等实时接入数据,离线分析文件生成系统会对kafka上的每条日志信息进行实时的文件转换工作,从而形成了大量的小文件供后续产品分析,与此同时,产生的大量远小于blocksize的小文件,大大影响了hadoop存储的读取性能。



技术实现要素:

针对上述技术问题,本发明实施例提供了一种离线小文件处理方法及装置,以提高hadoop系统存储的读取性能,有效的降低hadoop系统中namenode上内存的占用率。

一方面,本发明实施例提供了一种离线小文件处理方法,运行于hadoop分布式处理系统上,所述方法包括:

由hdfs中读取列式存储文件,其中,列式存储文件的大小小于预定的文件大小设定值;

提供进行数据处理指定的配置;

根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并;

基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件。

另一方面,本发明实施例还提供了一种离线小文件处理装置,集成在hadoop分布式处理系统中,所述装置包括:

读取模块,用于由hdfs中读取列式存储文件,其中,列式存储文件的大小小于预定的文件大小设定值;

配置模块,用于提供进行数据处理指定的配置;

预处理模块,用于根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并;

归并模块,用于基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件。

本发明实施例提供的离线小文件处理方法及装置,通过读取列式存储文件,提供进行数据处理执行的配置,对列式存储文件进行预处理及合并,以及按照指定的归并频率将执行预处理及合并后的列式存储文件归并为大文件,大大提高了hadoop系统存储的读取性能,能够有效的降低hadoop系统中namenode上内存的占用率。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1是本发明第一实施例提供的离线小文件处理方法的流程示意图;

图2是本发明第一实施例提供的运行离线小文件处理方法的系统的逻辑结构示意图;

图3是本发明第二实施例提供的离线小文件处理方法的流程示意图;

图4是本发明第三实施例提供的离线小文件处理方法中预处理的流程示意图;

图5是本发明第四实施例提供的离线小文件处理方法中遗弃数据处理的流程示意图;

图6是本发明第五实施例提供的离线小文件处理方法中文件归并的流程示意图;

图7是本发明第六实施例提供的离线小文件处理装置的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

第一实施例

本实施例提供了离线小文件处理方法的一种技术方案。在该技术方案中,离线小文件处理方法由离线小文件处理装置执行,并且,离线小文件处理装置通常集成在hadoop分布式数据处理系统之中。

参见图1,离线小文件处理方法包括:

s11,由hdfs中读取列式存储文件。

所谓列式存储,就是将同一个数据列的所有制存放在一起的存储方式。这种方式非常适合联机分析处理(olap),因为olap类型的查询往往只关心少量几个列,当字段数比较多且整个文件有几百万甚至数十亿行记录时,列式存储可以极大的减少扫描数据量,加快反馈速度。

在本实施例中列式存储优选为parquet文件。parquet文件可以为大数据生态系统中的服务提供高效的数据支持,且于编程语言、数据模型或数据框架都没有关系。而且,parquet文件能够被hadoop系统所处理,hive、impala和sparksql都能直接查询以parquet文件为基础的数据仓库。这一特性使得parquet文件可以替代传统的文本文件类型。

在本实施例中,被读取的parquet文件的大小均没有超出文件大小的上限。具体的,上述文件大小的上限为128mb。而且,parquet文件的存储位置通常是在hadoop系统中的datanode上。

系统读取源数据生产系统提供的parquet文件,为每个数据集的数据增加uniquenum字段,用于根据配置的数据集唯一字段通过md5算法计算该数据的唯一数据值,用于数据去重判断。为每个数据集的数据增加first_collect_time、last_collect_time、torl_found_counter、total_day_counter字段,用于对数据去重时,计算重复数据出现的最早时间、最迟时间,总计发现次数、累计发现天数等统计数据。

s12,提供进行数据处理指定的配置。

在后续的文件合并、归并等数据处理中,数据处理需要按照指定的规则运行。另外,在数据处理中经常会使用一些处理参数。这些规则及处理参数将以配置的形式来提供。

结合实际应用场景,该系统提供通过配置文件信息,进行数据筛选、数据唯一化指定的配置。该步骤需要用户根据配置信息模板,提供需要保留的数据集范围,数据集中数据的唯一标识信息等配置。

s13,根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并。

在本实施例中,预处理及合并处理主要是指数据的筛选、去重、合并,以及存储目录结构的优化。

筛选是指由海量的parquet小文件中,筛选出需要进行离线分析的文件。在本实施例中,小文件(smallfiles,sf)是指文件总大小没有达到设定的文件大小上限的文件。优选的,上述上限的设定值是128mb。

所谓去重是指对重复出现的数据记录进行去除,完全相同的数据记录仅保留其中一条记录的操作。

具体的,去重操作是根据数据缓存数据量阈值(databuffercount,dbc)以及数据缓存时长阈值(databuffertime,dbt)而执行的。dbc是指同类别的数据,在运算时缓存数据量的最大阈值,系统默认设置为1000000条。dbt是指同类别的数据,在运算时一次缓存的时间段最大阈值,系统默认设置为5分钟。在内存中会根据数据集生成map的键值对进行缓存,采用queue格式保存数据队列,缓存的数据当达到dbc或者dbt时,开始进行当前类别数据的去重操作。

所谓合并是指数据合并就是通过读取多个parquet文件的数据信息,经过处理合并为一个较大的parquet文件进行保存。经过前面的数据筛选、数据分类缓存、数据去重之后形成的数据合并结果生成文件进行保存。

所谓存储目录的优化能够达到使得合并后的parquet文件信息的目录结构更为有序的目的。目录结构的有序能够大大方便文件的检索及定位。优选的,在本实施例中,对合并文件的存储采用二层目录结构。更进一步的,根据采集日期生成一级存储目录,再根据数据集名称生成二级存储目录进行分类存储。

而且,上述的文件预处理及合并的操作是基于hadoop系统提供的map-reduce计算模型实现的。这将意味着预处理及合并的计算任务将被划分为若干细小的子任务,交由不同的运算节点设备分别执行。

s14,基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件。

定期文件归并是指系统定期对小文件进行归并为大文件的操作。系统会每天(系统设定为当前处理前一天目录数据)对前一天各目录数据进行归并操作,对于单个文件不到阈值(系统设定为128mb)的文件尝试进行归并操作,归并后的文件不超过设定阈值(系统设定合并后的文件大小上限为1024mb),并删除已进行归并的小文件。

在本实施例中,归并后文件不能超出的设定阈值被称为合并文件大小(mergefilesize,mfz)。它指的是合并后的大文件大小的最大阈值,系统默认设置为1024mb。

还有上述文件归并操作是按照指定期限执行的。这个指定期限被称为文件定期归并间隔时间(fixedconsolidationintervaltime,fcit)。它具体是指文件定期归并操作的间隔时间阈值,它的系统默认设定值是1天。

图2提供了执行本实施例提供的离线小文件处理方法的hadoop系统的整体结构框架。参见图2,该系统衔接源数据生产系统与离线分析系统,对离线分析系统的输入文件做进一步的优化,提高整体性能。本发明系统主要包括数据使用的配置管理、数据预处理及合并、遗弃数据的处理与恢复、定期文件归并四大部分功能,对源数据生产系统落地的parquet待分析小文件进行数据筛选、数据去重、数据合并后根据先按时间、后按数据集优化创建后的目录进行文件保存。这里源数据生产系统产生的数据已经做过元数据的处理,已经可以根据元数据中的数据集进行分类管理。系统提供的配置文件,用于对数据是否遗弃进行筛选,并根据配置的数据唯一关键字段(每条数据可以设置多个字段)进行数据的去重操作;已经遗弃的数据会定期进行数据的压缩,减少对hadoop的namenode内存使用,并提供一定的数据恢复机制;已合并的数据会定期进行小文件的归并操作,进一步优化hadoop的存储,优化整体系统性能。

本实施例对于明确元数据的不同第三方来源数据,提供了数据层面的筛选定制功能,并对筛选遗弃的数据进行压缩管理,有效降低namenode内存使用情况。对于待分析的离线文件数据进行了数据去重、数据合并、目录存储优化操作,并通过定期文件归并功能,归并小文件,提高对原小文件的读取效率,提升了整体性能。

第二实施例

本实施例以本发明前述实施例为基础,进一步的提供了离线小文件处理方法的一种技术方案。在该技术方案中,离线小文件处理方法还进一步包括:在对所述列式存储文件进行预处理及合并之后,基于map-reduce计算模型,对遗弃数据进行定期的压缩及恢复。

参见图3,离线小文件处理方法包括:

s31,由hdfs中读取列式存储文件,其中,列式存储文件的大小小于预定的文件大小设定值。

s32,提供进行数据处理指定的配置。

s33,根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并。

s34,基于map-reduce计算模型,对遗弃数据进行定期的压缩及恢复。

遗弃数据是指在预处理阶段,没有通过数据筛选操作的数据。也就是说,经过筛选操作,hadoop系统认为这些数据不需要对其执行离线分析。

遗弃数据的处理与恢复还提供定期压缩遗弃数据、定期删除遗弃数据、恢复数据的功能。定期压缩遗弃数据是根据遗弃数据压缩间隔时间(abandoneddatacompressionintervaltime,adcit),对遗弃数据进行压缩操作。压缩数据时会重新维护一张压缩数据表,记录压缩后的文件名称、压缩时间、遗弃数据的时间范围、遗弃数据的数据集范围。基于hadoop提供的har压缩机制,对遗弃的sf进行压缩处理,减少对hadoop的namenode内存使用,优化hadoop整体文件读取性能。压缩完毕后将原始遗弃的sf清除并清除对应的遗弃数据登记信息。定期删除遗弃数据是根据遗弃数据保留最长时间(abandoneddatareservationtime,adrt),对保留的遗弃数据进行清除操作,进一步降低对hadoop的存储压力。删除对应压缩文件的同时,删除对应的压缩文件数据表信息。恢复数据是根据用户要求恢复指定的删除数据信息。如果要恢复的数据尚未进行压缩,则检索遗弃数据登记表信息,恢复相关数据文件到本发明系统的输入目录,进行后续的离线分析文件数据的预处理及合并操作等;如果恢复的数据已经经过压缩,则需要检索压缩数据信息表,找到对应压缩文件,解压出相关文件到本发明系统的输入目录;如果要恢复的数据在两处均为找到,则恢复操作失败。

s35,基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件。

本实施例通过在对列式存储文件进行预处理及合并之后,采用map-reduce计算模型对遗弃数据进行定期的压缩及恢复,进一步的提高了系统中小文件的读取效率。

第三实施例

本实施例以本发明前述实施例为基础,进一步的提供了离线小文件处理方法中预处理的一种技术方案。在该技术方案中,根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并,包括:基于map-reduce计算模型,对列式存储文件的内容数据进行筛选;基于map-reduce计算模型,对列式存储文件的内容数据进行去重;基于map-reduce计算模型,对列式存储文件进行合并;以及基于map-reduce计算模型,对列式存储文件的存储目录结构进行优化。

参见图4,根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并,包括:

s41,基于map-reduce计算模型,对列式存储文件的内容数据进行筛选。

可以理解的是,在对列式存储文件进行归并之前,列式存储文件中的一些数据存储内容是不需要进行离线分析的。因此,在预处理阶段,首先需要对列式存储文件中存储的内容数据进行筛选操作。经过筛选之后,通过筛选的数据被以新的列式存储文件的形式保存,而没有经过筛选的数据则被识别为遗弃数据。

在进行列式存储文件的预处理及合并操作之初,首先需要对列式存储文件计算唯一值。计算依据为用户配置的该数据集的唯一字段信息进行加权计算,生成md5数据,保存在该数据的uniquenum字段中。

s42,基于map-reduce计算模型,对列式存储文件的内容数据进行去重。

去重操作是对列式存储文件的存储内容的去重。去重操作会根据计算好md5值进行比较判断,如果存在重复数据,会删除较晚插入队列的数据,并更新较早插入队列数据的first_collect_time、last_collect_time、torl_found_counter、total_day_counter四个字段信息。

s43,基于map-reduce计算模型,对列式存储文件进行合并。

当前批次的数据处理完毕后,生成合并后的parquet文件进行保存,同时清空该队列数据,以便开始下一批次数据的缓冲处理。

s44,基于map-reduce计算模型,对列式存储文件的存储目录结构进行优化。

文件保存的时候首先会根据处理日期创建日期目录,并根据数据集信息,即key值创建对应数据集目录,并将合并的文件以数据集和数据处理时间段进行命名,保存到对应的数据集目录下。一切操作成功后,删除该批次对应的原始离线分析sf。

本实施例通过对列式存储文件的内容数据进行筛选,对上述内容数据进行去重,对列式存储文件进行合并,以及对存储目录结构进行优化,实现了对列式存储文件的预处理及合并操作。

第四实施例

本实施例以本发明前述实施例为基础,进一步的提供了离线小文件处理方法中遗弃数据处理的一种技术方案。在该技术方案中,基于map-reduce计算模型,对遗弃数据进行定期的压缩及恢复,包括:基于map-reduce计算模型,由原始数据中区分出遗弃数据;基于map-reduce计算模型,对遗弃数据进行定期压缩,生成har文件;以及基于map-reduce计算模型,对遗弃数据进行定期的恢复。

参见图5,基于map-reduce计算模型,对遗弃数据进行定期的压缩及恢复,包括:

s51,基于map-reduce计算模型,由原始数据中区分出遗弃数据,并且懂遗弃数据守护进程。

实际上区分出遗弃数据的过程,就是数据筛选的过程。区分出遗弃数据之后,会启动专用用于对遗弃数据进行处理的遗弃数据守护进程。由这个遗弃数据守护进程执行对遗弃数据的定期压缩、定期删除、定期恢复等操作。

s52,基于map-reduce计算模型,对遗弃数据进行定期压缩,生成har文件。

对于遗弃数据的压缩,是定期执行的。上述压缩操作的执行期限通常是1天。当上述时间期限到达之后,利用hadoop系统自身的hadooparchive功能,对已经识别的遗弃数据生成对应的har文件。

s53,基于map-reduce计算模型,对遗弃数据进行定期的恢复。

恢复数据是指恢复已经遗弃的数据,采用后续离线分析工作。如果要恢复的数据是当天遗弃的(也就是尚未进行压缩处理),直接检索遗弃的数据登记表,并将遗弃的数据文件放置到当天对应数据集目录下,作为数据预处理及合并的输入数据,进行后续的操作;如果要恢复的数据不是当天数据,则需要检索压缩文件数据对应表信息,如果超出遗弃数据保留时间(系统设定为30天),则恢复失败;否则,找到相应的har文件,解压出相应的数据文件放置到当天对应数据集目录下,作为数据预处理及合并的输入数据,进行后续的操作。

除了上述区分、压缩及恢复的操作,对遗弃数据的处理还包括对遗弃数据的删除。而且,上述对遗弃数据的压缩、删除及恢复操作均是由遗弃数据守护进程完成的,它们在时序上并不存在必然的先后关系。

本实施例通过由原始数据中区分出遗弃数据,对遗弃数据进行定期压缩,以及对遗弃数据进行定期的恢复,实现了对列式存储文件中遗弃数据的处理。

第五实施例

本实施例以本发明前述实施例为基础,进一步的提供了离线小文件处理方法中文件归并的一种技术方案。在该技术方案中,基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件,包括:根据列式存储文件的存储目录结构,将所述列式存储文件归并为大文件。

具体的,参见图6,基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件,包括:

s61,顺序读取目录中需要合并的列式存储文件。

s62,判断目录中是否还有需要合并的列式存储文件,如果是,执行s63,如果不是执行s61。

s63,将读取的小文件归并为大文件。

s64,判断归并后的大文件的大小是否超出了大小阈值,如果是,丢弃大文件,如果不是,保留大文件。

需要说明的是,上述归并操作是基于map-reduce计算模型而执行的。具体的,上述归并操作基于datanode上若干个目录中存储的列式存储文件,基于map-reduce计算模型并行的执行上述归并操作。

本实施例通过定期的执行上述归并操作,将小文件归并为大文件,大大提升了hadoop系统的读取性能。

第六实施例

本实施例提供了离线小文件处理装置的一种技术方案。在该技术方案中,离线小文件处理装置集成在hadoop分布式处理系统中。参见图7,离线小文件处理装置包括:读取模块71、配置模块72、预处理模块73,以及归并模块75。

读取模块71用于由hdfs中读取列式存储文件,其中,列式存储文件的大小小于预定的文件大小设定值。

配置模块72用于提供进行数据处理指定的配置。

预处理模块73用于根据所述配置,基于map-reduce计算模型,对所述列式存储文件进行预处理及合并。

归并模块75用于基于map-reduce计算模型,按照指定的归并频率将执行预处理及合并后的所述列式存储文件归并为大文件。

进一步的,离线小文件处理装置还包括:遗弃运算模块74。

遗弃运算模块74用于在对所述列式存储文件进行预处理及合并之后,基于map-reduce计算模型,对遗弃数据进行定期的压缩及恢复。

进一步的,预处理模块73包括:筛选单元、去重单元、合并单元,以及目录优化单元。

筛选单元用于基于map-reduce计算模型,对列式存储文件的内容数据进行筛选。

去重单元用于基于map-reduce计算模型,对列式存储文件的内容数据进行去重。

合并单元用于基于map-reduce计算模型,对列式存储文件进行合并。

目录优化单元用于基于map-reduce计算模型,对列式存储文件的存储目录结构进行优化。

进一步的,遗弃运算模块74包括:区分单元、压缩单元,以及恢复单元。

区分单元用于基于map-reduce计算模型,由原始数据中区分出遗弃数据,其中,所述遗弃数据为不需要参加离线分析的数据。

压缩单元用于基于map-reduce计算模型,对遗弃数据进行定期压缩,生成har文件。

恢复单元用于基于map-reduce计算模型,对遗弃数据进行定期的恢复。

进一步的,归并模块具体用于:根据列式存储文件的存储目录结构,将所述列式存储文件归并为大文件。

进一步的,所述列式存储文件包括:parquet存储文件。

本领域普通技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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