一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种MapReduce内存溢出解决方法及装置与流程

2022-05-26 20:44:09 来源:中国专利 TAG:

一种mapreduce内存溢出解决方法及装置
技术领域
1.本发明涉及数据处理技术领域,尤其涉及一种mapreduce内存溢出解决方法及装置。


背景技术:

2.mapreduce作为一种面向大数据并行处理的计算模型、框架和平台,具有良好的扩展性,适用于pb级以上海量数据的离线处理,在大数据量的数据加工中发挥着重要的作用。然而,当数据量激增至原数据量的三至四倍且存在严重的数据倾斜时,会导致一个或某几个的reduce上分配的数据量远高于平均值,从而使得加工效率十分低下,甚至会出现reduce内存严重溢出的情况。
3.在实际场景中,可直接在hive中调用hql语句进行串行数据加工以解决上述内存溢出的情况,但相较于mapreduce接口却存在加工效率极其低下的问题,从而影响业务正常流程。


技术实现要素:

4.有鉴于此,本发明提供了一种mapreduce内存溢出解决方法及装置,用来解决在实际场景中,可直接在hive中调用hql语句进行串行数据加工以解决上述内存溢出的情况,但相较于mapreduce接口却存在加工效率极其低下的问题。具体方案如下:
5.一种mapreduce内存溢出解决方法,包括:
6.基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;
7.确定待分表数目,基于所述待分表数目创建分表路径;
8.基于所述待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;
9.在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;
10.对所述分表结果进行合并,得到目标分表结果。
11.上述的方法,可选的,基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件,包括:
12.解析所述预设的联合主键,确定所述预设的联合主键中包含的各个主键;
13.在map阶段确定与各个主键对应的初始数据文件,其中,每个主键对应至少一个初始数据文件;
14.在reduce阶段在与每个主键对应的各个初始数据文件中选取与其对应的目标数据文件。
15.上述的方法,可选的,在reduce阶段在与每个主键对应的各个初始数据文件中选取与其对应的目标数据文件,包括:
16.遍历所述各个初始数据文件,获取所述各个初始数据文件的各个对应项;
17.将所述各个对应项中包含数据最完整的初始数据文件作为与其对应的目标数据文件。
18.上述的方法,可选的,确定待分表数目,基于所述待分表数目创建分表路径,包括:
19.获取分表参数,基于所述分表参数确定待分表数目;
20.基于所述待分表数目在hdfs中创建分表路径。
21.上述的方法,可选的,在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果,包括:
22.为每一个分表路径分配mapreduce接口;
23.基于mapreduce接口并行对每个分表路径包含的目标数据文件进行处理,得到至少一个分表结果。
24.一种mapreduce内存溢出解决装置,包括:
25.去重模块,用于基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;
26.确定和创建模块,用于确定待分表数目,基于所述待分表数目创建分表路径;
27.拷贝模块,用于基于所述待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;
28.处理模块,用于在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;
29.合并模块,用于对所述分表结果进行合并,得到目标分表结果。
30.上述的装置,可选的,所述去重模块包括:
31.第一确定单元,用于解析所述预设的联合主键,确定所述预设的联合主键中包含的各个主键;
32.第二确定单元,用于在map阶段确定与各个主键对应的初始数据文件,其中,每个主键对应至少一个初始数据文件;
33.选取单元,用于在reduce阶段在与每个主键对应的各个初始数据文件中选取与其对应的目标数据文件。
34.上述的装置,可选的,所述选取单元包括:
35.获取子单元,用于遍历所述各个初始数据文件,获取所述各个初始数据文件的各个对应项;
36.确定子单元,用于将所述各个对应项中包含数据最完整的初始数据文件作为与其对应的目标数据文件。
37.上述的装置,可选的,所述确定和创建模块包括:
38.第三确定单元,用于获取分表参数,基于所述分表参数确定待分表数目;
39.创建单元,用于基于所述待分表数目在hdfs中创建分表路径。
40.上述的装置,可选的,所述处理模块包括:
41.分配单元,用于为每一个分表路径分配mapreduce接口;
42.处理单元,用于基于mapreduce接口并行对每个分表路径包含的目标数据文件进行处理,得到至少一个分表结果。
43.与现有技术相比,本发明包括以下优点:
44.本发明公开了一种mapreduce内存溢出解决方法及装置,包括:基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;确定待分表数目,基于待分表数目创建分表路径;基于待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;对分表结果进行合并,得到目标分表结果。上述过程,首先对待加工表中的初始数据文件进行去重处理,进一步,对得到目标数据进行在分表路径下进行并行处理,相较于现有技术中在hive中调用hql语句进行串行数据加工以解决内存溢出,不但减少了mapreduce处理数据文件的量还采用了并行处理方式提高了处理效率。
附图说明
45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1为本技术实施例公开的一种mapreduce内存溢出解决方法流程图;
47.图2为本技术实施例公开的一种mapreduce内存溢出解决方法处理流程示意图;
48.图3为本技术实施例公开的一种mapreduce内存溢出解决装置结构框图。
具体实施方式
49.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
50.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
51.本发明公开了一种mapreduce内存溢出解决方法及装置,应用于防止mapreduce内存溢出的过程中,其中,mapreduce:一种分布式计算模型,主要用于解决海量数据的离线并行计算问题,现有技术中,基于mapreduce进行数据查询、处理和加工十分常见,该方式具有可处理数据量大、扩展性强等特点。然而,数据量激增在实际应用中十分常见,由此带来的数据倾斜问题在mapreduce执行过程中不可避免,易引发reduce内存严重溢出无法正常运行,若未能及时对其进行优化解决,会极大程度地影响系统有序运行。
52.为解决上述由于数据倾斜导致的reduce内存严重溢出的情况,目前业内主要有以下几种解决方法:
53.增加reduce程序运行内存,但由于总体内存有限且可能会对集群内其它任务的运
行产生不稳定、不确定的影响,因此该方法存在局限性。
54.增加reduce个数,该方法的确可有效解决数据倾斜问题,但却是以巨大的硬件投入为代价。
55.将mapreduce接口程序转换为hql语句,虽可正常完成数据加工,但效率极其低下,难以满足企业内部对于数据加工时效的要求。
56.由数据倾斜导致的数据内存溢出问题十分常见,其中,数据倾斜指由于key值分布不均匀、业务数据特性等问题导致分配到某一个或几个reduce上的数据量远高于平均值,从而大幅影响数据处理效率。
57.现有方法多是依赖于增加程序资源等操作进行暴力解决,但随着数据量累积等因素,上述方法不可避免的会再次出现问题,不具备推广性和适用性。因此,提出一种不依赖于大量硬件投入、不降低数据加工时效且随着数据量累加依然具备良好性能的数据倾斜解决方法成为一项亟待解决的问题。因此,本发明提供了一种mapreduce内存溢出解决方法用于解决上述问题,所述方法的执行流程如图1所示,包括步骤:
58.s101、基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;
59.本发明实施例中,预设的联合主键是基于经验或者具体的应用场景进行确定的,本发明实施例中不进行具体限定,优选的,所述预设的联合主键可以为多维字段,所述预设的联合主键用于待加工表中的初始数据文件进行去重处理,其中,所述预设的联合主键中至少包含一个主键,优选的,所述主键为多维字段中的某个具体字段,进一步的,因所述预设的联合主键具有重复度低、分布均匀的特点,因此只要所述预设的联合主键选取得当即可使得预去重时map阶段的键值(key值)分布均匀,从而避免数据倾斜情况的发生,使得去重结束的目标数据文件分布均匀。
60.所述待加工表中包含有多个初始数据文件,每个初始数据文件都会存在一个与其对应的主键,一个主键可以对应多个初始数据文件,针对mapreduce的预去重处理过程,主要包括map阶段和reduce阶段,在map阶段确定待加工表中与每个主键对应的初始数据文件,具体的确定过程可以通过遍历待加工表,将包含对应主键的初始数据文件与该主键建立关联,由于在map阶段会存在一个主键对应多个初始数据文件的情况,因此,在reduce阶段,对map阶段中存在的一个主键对应多个初始数据文件的情况进行去重处理,具体的去重过程如下:遍历所述各个初始数据文件,获取所述各个初始数据文件的各个对应项;将所述各个对应项中包含数据最完整的初始数据文件作为与其对应的目标数据文件。进一步的,若当前主键只存在一条与其对应的初始数据文件,则该初始数据文件为与所述当前主键对应的目标数据文件。
61.s102、确定待分表数目,基于所述待分表数目创建分表路径;
62.本发明实施例中,由于reduce阶段输出的目标数据文件的数据量、文件大小基本一致,在确定了与每个主键对应的目标数据文件后,获取分表参数,其中,所述分表参数基于服务器底层空间参数进行,本发明实施例中对所述分表参数的具体取值不进行限定,进一步的,以文件维度为单位自动识别hdfs上产生的目标数据文件数目,获取目标数据文件的数据量,将该数据量与所述分表参数的比值作为待分表数目,随后依次创建相应数目的分表路径。
63.s103、基于所述待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;
64.本发明实施例中,基于所述待分表数目和预设的分表逻辑,将对应的目标数据文件拷贝至各表对应的分表路径下,即hdfs路径下,其中,所述预设的分表逻辑基于具体的应用场景进行限定,本发明实施例中不进行具体限定,即完成了分表数目自动计算、分表数据自动拷贝的自适应分表逻辑设计,用户只需指定各分表路经下表文件大小即可。上述过程,具有适用性强,应用接口化、易于扩展的优点。
65.s104、在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;
66.本发明实施例中,基于mapreduce接口在所述分表路径下并行对对应分表路径下的目标数据文件进行处理,其中,具体的处理方式与所述mapreduce接口中对应的处理程序有关,所述处理程序依据具体的应用场景的不同而不同,本发明实施例中,对所述处理程序不进行限定,处理完成后针对每个分表路径下存在至少一个分表结果,其中,所述分表结果的数量与该分表路径下存储的目标数据文件的数量有关。
67.s105、对所述分表结果进行合并,得到目标分表结果。
68.本发明实施例中,需要对各个分表结果进行合并,优选的,为了避免分表结果由于名称相同被覆盖,在对分表结果进行合并之前,需要对所述各个分表结果进行重命名,保证分表结果的名称具有唯一性,将重命名之后的分表结果全部复制到指定位置,完成对所述各个分表结果的合并,得到目标分表结果,其中,所述指定位置可以基于经验或者具体的应用场景进行指定,本发明实施例中,对所述指定位置不进行具体限定。
69.本发明公开了一种mapreduce内存溢出解决方法,包括:基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;确定待分表数目,基于待分表数目创建分表路径;基于待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;对分表结果进行合并,得到目标分表结果。上述过程,首先对待加工表中的初始数据文件进行去重处理,进一步,对得到目标数据进行在分表路径下进行并行处理,相较于现有技术中在hive中调用hql语句进行串行数据加工以解决内存溢出,不但减少了mapreduce处理数据文件的量还采用了并行处理方式提高了处理效率。
70.本发明实施例中,针对上述过程的整体处理流程示意图如图2所示,待加工数据进行加工前需依次经过如下步骤:预去重、自适应自动分表、mapreduce接口以及分表合并接口。通过预去重接口,根据设置的多维去重主键可基本实现去重后的数据分布均匀,随后以文件为维度根据数据量自动确定分表数目以完成分表,随后将分表1、分表2

分表n依次送入mapreduce接口进行数据处理加工,加工完成后,对各个分表的分表结果进行分表合并,即可完成核心加工逻辑。
71.在实际应用中,数据总是随着时间的推移逐渐累加的,无论是增加集群节点以提升内存还是转换mapreduce接口为hql语句,都存在在不稳定、不确定以及数据处理效率低下的问题。本发明可自适应的根据数据量的增加而自动调整分表数目,克服了传统方法的缺陷,更加具有鲁棒性及扩展性,实现了mapreduce内存需要及数据量的解耦,从本质上分
析并解决了数据倾斜的问题,在不降低加工效率且无需增加硬件资源的前提下解决了因数据量激增导致的mapreduce内存溢出的问题,具备行内可推广性。
72.与现有其它技术相比,本发明的优点体现在以下几个方面:
73.自适应性强。本发明所提出的技术方法让用户可系统运行前设定分表大小参数,该参数可根据表文件所占内存大小自适应调节,所占内存越大,分表粒度越小,从而实现自动分表,可保证分表后的各小表均可正常平稳的通过mapreduce核心接口加工,实现待加工表数据量和mapreduce接口程序所需内存的解耦。
74.推广性好。本发明无需增加hadoop集群节点数目或硬件资源数目以扩展内存,对硬件资源有限的系统具备应用可能性;即使数据量持续累加,仍可在无需增加任何硬件资源的情况下完成数据加工,对小集群具有良好的可应用性。
75.鲁棒性强。传统方法通过扩展内存的方式或增加复杂算法实现负载均衡的方法虽可短期内顺利完成mapreduce加工,但加工效率会持续受到影响,不具备长期运行的稳定性。本发明在不损失加工效率的前提下,为增加任何复杂算法,可实现系统长期有效的运行。
76.本发明解决了hql语句效率低和mapreduce接口易内存溢出的矛盾,从本质上分析数据倾斜的实质,将mapreduce接口黑盒化,基于待加工表预去重和自适应自动分表操作解决数据倾斜,各分表依次通过mapreduce接口黑盒再进行拼接,即可解决内存溢出的问题。本发明无需新增任何硬件资源,同时分表数目可基于数据量的大小自动调整以确保每一个通过mapreduce接口黑盒的分表均可正常完成加工,具有极强的鲁棒性和自适应性,可适用于各个规模的hadoop集群,具有较好的可推广性。本发明即使在数据持续累加的情况下也具有非常好的适应性,可根据数据量级大小自动调节分表数目,在保证数据加工效率的前提下基本保证了不会出现内存溢出的情况,具有较好的普适性。
77.基于上述的一种mapreduce内存溢出解决方法,本发明实施例中还提供了一种mapreduce内存溢出解决装置,所述装置的结构框图如图3所示,包括:
78.去重模块201、确定和创建模块202、拷贝模块203、处理模块204和合并模块205。
79.其中,
80.所述去重模块201,用于基于预设的联合主键对待加工表中的初始数据文件进行预去重处理202,得到至少一个目标数据文件;
81.所述确定和创建模块,用于确定待分表数目,基于所述待分表数目创建分表路径;
82.所述拷贝模块203,用于基于所述待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;
83.所述处理模块204,用于在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;
84.所述合并模块205,用于对所述分表结果进行合并,得到目标分表结果。
85.本发明公开了一种mapreduce内存溢出解决装置,包括:基于预设的联合主键对待加工表中的初始数据文件进行预去重处理,得到至少一个目标数据文件;确定待分表数目,基于待分表数目创建分表路径;基于待分表数目和预设的分表逻辑将对应目标数据文件拷贝至对应分表路径下;在每个分表路径下基于mapreduce接口并行对其中包含的目标数据文件进行处理,得到至少一个分表结果;对分表结果进行合并,得到目标分表结果。上述过
程,首先对待加工表中的初始数据文件进行去重处理,进一步,对得到目标数据进行在分表路径下进行并行处理,相较于现有技术中在hive中调用hql语句进行串行数据加工以解决内存溢出,不但减少了mapreduce处理数据文件的量还采用了并行处理方式提高了处理效率。
86.本发明实施例中,所述去重模块201包括:
87.第一确定单元206、第二确定单元207和选取单元208。
88.其中,
89.所述第一确定单元206,用于解析所述预设的联合主键,确定所述预设的联合主键中包含的各个主键;
90.所述第二确定单元207,用于在map阶段确定与各个主键对应的初始数据文件,其中,每个主键对应至少一个初始数据文件;
91.所属选取单元208,用于在reduce阶段在与每个主键对应的各个初始数据文件中选取与其对应的目标数据文件。
92.本发明实施例中,所述选取单元208包括:
93.获取子单元209和确定子单元210。
94.其中,
95.所述获取子单元209,用于遍历所述各个初始数据文件,获取所述各个初始数据文件的各个对应项;
96.所述确定子单元210,用于将所述各个对应项中包含数据最完整的初始数据文件作为与其对应的目标数据文件。
97.本发明实施例中,所述确定和创建模块202包括:
98.第三确定单元211和创建单元212。
99.其中,
100.所述第三确定单元211,用于获取分表参数,基于所述分表参数确定待分表数目;
101.所述创建单元212,用于基于所述待分表数目在hdfs中创建分表路径。
102.本发明实施例中,所述处理模块204包括:
103.分配单元213和处理单元214。
104.其中,
105.所述分配单元213,用于为每一个分表路径分配mapreduce接口;
106.所述处理单元214,用于基于mapreduce接口并行对每个分表路径包含的目标数据文件进行处理,得到至少一个分表结果。
107.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
108.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
109.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
110.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
111.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
112.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。存储器是计算机可读介质的示例。
113.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
114.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
115.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
116.以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献