处理数据倾斜的方法、装置、设备及存储介质与流程

文档序号:20487739发布日期:2020-04-21 21:48阅读:120来源:国知局
处理数据倾斜的方法、装置、设备及存储介质与流程

本申请涉及数据处理领域,尤其涉及处理数据倾斜的方法、装置、设备及存储介质。



背景技术:

随着物联网、云计算和网络带宽等技术的高速发展,大数据计算被广泛运用。大数据计算中,海量的数据信息的传输或存储或处理常会导致数据倾斜。在现有的数据仓库工具hive中,没有可调整的参数或者可调用的函数,来直接性地解决数据读取时所发生的数据倾斜问题,以至于hive以及其他的大数据计算引擎在读取hive表数据发生数据倾斜时,得不到及时和有效的处理,从而导致整个任务无法按规定时效完成,进而无法达到业务需求。

目前的数据倾斜处理,通过检测输入文件的大小,若所述输入文件的大小小于第一预设阈值,则检测大小小于第一预设阈值的输入文件的数量,当所述数量大于第二预设阈值时,将文件合并,若文件的大小在预设范围内,则增加map的数量。

由于在获取单个原输入文件时需要将合并文件拆分,导致数据处理资源的增加,影响运行时间,且map数据的增加导致数据处理时间的增长,以影响运行效率,因而,导致无法有效地解决数据倾斜处理问题。



技术实现要素:

本申请提供了一种处理数据倾斜的方法、装置、设备及存储介质,能够有效地解决数据倾斜处理问题。

第一方面,本申请提供一种处理数据倾斜的方法,所述方法包括:

预先设置待存储空间的容量大小,设置所述待存储空间中的数据类型和各所述数据类型对应的数据的目标数量;

基于所述容量大小和所述数据类型根据预设规则对所述待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量所述待存储空间的数量包括多个子存储空间;

根据各所述子存储空间的大小以及所述数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,所述子存储空间包括多个所述目标存储空间;

根据各分区内所述目标存储空间的数量设置各分区的随机数,所述随机数包括各分区对应的分区号;

将预设判断条件和所述随机数标记在所述待存储空间中的各数据上,所述预设判断条件用于判断存储到目标待存储空间中的数据;

通过随机分组函数分析所述待存储空间中的各数据上标记的内容,以将所述各数据类型对应的数据存储到目标待存储空间中。

一种可能的设计中,所述根据各所述子存储空间的大小以及所述数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,包括:

通过分区规则分析所述数据类型对应的目标数量,确定所述子存储空间的划分区域和划分数量,所述划分数量指示各所述划分区域内存储的数据的数量;

根据所述子存储空间的大小计算各所述划分区域的大小,得到各区域大小;

根据所述划分数量对各所述划分区域进行平均划分,得到各所述划分区域中多个目标存储空间,所述各所述划分区域对应的目标存储空间的数量和为各分区内目标存储空间的数量;

根据所述各区域大小计算各所述划分区域对应的目标存储空间的平均大小,得到各分区内目标存储空间的大小。

一种可能的设计中,所述根据各所述子存储空间的大小以及所述数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,包括:

获取所述子存储空间中键key的量级;

根据所述key的量级设置数量阈值,所述数量阈值指示存储于所述子存储空间中的目标存储空间的最大数量;

将所述数量阈值、所述子存储空间的大小和所述数据类型对应的目标数量作为判断项,并创建所述数量阈值、所述子存储空间的大小和所述数据类型对应的目标数量的对应关系;

根据所述判断项和所述对应关系建立分区规则,并根据所述分区规则和所述对应关系创建划分表;

根据所述对应关系遍历所述划分表获得各分区内目标存储空间的大小和数量。

一种可能的设计中,所述根据各分区内所述目标存储空间的数量设置各分区的随机数,包括:

获取根据所述划分表获取的各分区内所述目标存储空间的数量;

将各分区内所述目标待存储空间的数量的值设置为各分区的随机数的最大值;

基于所述最大值通过随机函数生成各分区的随机数。

一种可能的设计中,所述预设判断条件,包括:

当检测到一个或一个以上的回调函数对应的数据的数量大于预设平均值时,获取回调函数对应的数据的数量为最大值对应的目标key;

将所述目标key重新组合成弹性分布式数据集,并在经过重新组合成弹性分布式数据集的所述目标key的前缀标记所述随机数;

将标记所述随机数为前缀的目标key调到多个任务中进行结合join操作以获取多个操作结果,将多个所述操作结果聚合;

当检测到用户表与日志表中的目标数据类型存在差异时,分别将所述用户表与所述日志表中的目标数据类型中的数字类型转换成字符串类型,其中,所述待存储空间包括用户表和日志表,所述目标数据类型指示相同数据字段的数据类型;

检测经过数据类型转换的数据是否存在空值,若是,则赋予存在空值的数据新的key值,其中,所述新的key值指示将空值的key转换为一个标记所述随机数的字符串。

一种可能的设计中,所述预设判断条件,包括:

判断执行时间是否大于预设执行任务时间的三分之二,其中,所述执行时间用于指示所述各数据对应的任务的执行时间,所述预设执行时间指示预设的重新分配的任务执行时间;

判断执行时间是否大于预设执行时间的三分之二,其中,所述执行时间指示所述各数据对应的任务的执行时间,所述预设执行时间指示预设的重新分配的任务执行时间;

若执行时间大于预设执行时间的三分之二,则标记所述执行时间大于预设执行时间的三分之二的数据为剔除数据,并标记标签信息,所述标签信息存储于标记所述剔除数据的目标存储空间中;

判断所述各数据是否带有预置符号;

若所述各数据带有预置符号,则标记所述各数据中带有预置符号的数据为剔除数据,并标记标签信息,所述标签信息存储于标记剔除数据的目标存储空间中。

一种可能的设计中,所述根据各分区内所述目标存储空间的数量设置各分区的随机数,包括:

根据各分区内所述目标存储空间的数量设置各数据的配置权重值;

获取所述目标存储空间的各数据的当前有效权重值,并将所述当前有效权重值初始为所述配置权重值,计算所述各数据的配置权重值总和;

从一到所述配置权重值总和的值之间随机选择一个目标值,并按照当前有效权重值从大到小的顺序对所述各数据进行排序,以获取排序集合;

遍历所述排序集合,计算所述排序集合遍历到的数据的当前有效权重值之和;

当检测到所述当前有效权重值之和不小于所述目标值时,停止对所述排序集合的遍历,将停止对所述排序集合的遍历时的数据的当前有效权重值设置为分区的随机数。

第二方面,本申请提供一种处理数据倾斜的装置,具有实现对应于上述第一方面提供的处理数据倾斜的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。

一种可能的设计中,所述装置包括:

收发模块,用于接收预先设置待存储空间的容量大小,设置所述待存储空间中的数据类型和各所述数据类型对应的数据的目标数量;

处理模块,用于基于所述收发模块接收的所述容量大小和所述数据类型根据预设规则对所述待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量,所述待存储空间包括多个所述子存储空间;根据各所述子存储空间的大小以及所述数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,所述待存储空间的数量包括多个所述目标存储空间;根据各分区内所述目标存储空间的数量设置各分区的随机数,所述随机数包括各分区对应的分区号;将预设判断条件和所述随机数标记在所述待存储空间中的各数据上,所述预设判断条件用于判断存储到目标待存储空间中的数据;通过随机分组函数分析所述待存储空间中的各数据上标记的内容,以将所述各数据类型对应数据存储到目标待存储空间中。

一种可能的设计中,所述处理模块还用于:

通过分区规则分析所述数据类型对应的目标数量,确定所述子存储空间的划分区域和划分数量,所述划分数量指示各所述划分区域内存储的数据的数量;

根据所述子存储空间的大小计算各所述划分区域的大小,得到各区域大小;

根据所述划分数量对各所述划分区域进行平均划分,得到各所述划分区域中多个目标存储空间,所述各所述划分区域对应的目标存储空间的数量和为各分区内目标存储空间的数量;

根据所述各区域大小计算各所述划分区域对应的目标存储空间的平均大小,得到各分区内目标存储空间的大小。

一种可能的设计中,所述处理模块还用于:

获取所述子存储空间中键key的量级;

根据所述key的量级设置数量阈值,所述数量阈值用于指示存储于所述子存储空间中的目标存储空间的最大数量;

将所述数量阈值、所述子存储空间的大小和所述数据类型对应的目标数量作为判断项,并创建所述数量阈值、所述子存储空间的大小和所述数据类型对应的目标数量的对应关系;

根据所述判断项和所述对应关系建立分区规则,并根据所述分区规则和所述对应关系创建划分表;

根据所述对应关系遍历所述划分表,获得各分区内目标存储空间的大小和数量。

一种可能的设计中,所述处理模块还用于:

获取根据所述划分表获取的各分区内所述目标存储空间的数量;

将各分区内所述目标待存储空间的数量的值设置为各分区的随机数的最大值;

基于所述最大值通过随机函数生成各分区的随机数。

一种可能的设计中,所述处理模块还用于:

当检测到一个或一个以上的回调函数对应的数据的数量大于预设平均值时,获取回调函数对应的数据的数量为最大值对应的目标key;

将所述目标key重新组合成弹性分布式数据集,并在经过重新组合成弹性分布式数据集的所述目标key的前缀标记所述随机数;

将标记所述随机数为前缀的目标key调到多个任务中进行结合join操作以获取多个操作结果,将多个所述操作结果聚合;

当检测到用户表与日志表中的目标数据类型存在差异时,分别将所述用户表与所述日志表中的目标数据类型中的数字类型转换成字符串类型,其中,所述待存储空间包括用户表和日志表,所述目标数据类型指示相同数据字段的数据类型;

检测经过数据类型转换的数据是否存在空值,若是,则赋予存在空值的数据新的key值,其中,所述新的key值指示将空值的key转换为一个标记所述随机数的字符串。

一种可能的设计中,所述处理模块还用于:

判断执行时间是否大于预设执行时间的三分之二,所述执行时间指示所述各数据对应的任务的执行时间,所述预设执行时间指示预设的重新分配的任务执行时间;

若执行时间大于预设执行时间的三分之二,则标记所述执行时间大于预设执行时间的三分之二的数据为剔除数据,并标记标签信息,所述标签信息存储于标记所述剔除数据的目标存储空间中;

判断所述各数据是否带有预置符号;

若所述各数据带有预置符号,则标记所述各数据中带有预置符号的数据为剔除数据,并标记标签信息,所述标签信息存储于标记剔除数据的目标存储空间中。

一种可能的设计中,所述处理模块还用于:

根据各分区内所述目标存储空间的数量设置各数据的配置权重值;

获取所述目标存储空间的各数据的当前有效权重值,并将所述当前有效权重值初始为所述配置权重值,计算所述各数据的配置权重值总和;

从一到所述配置权重值总和的值之间随机选择一个目标值,并按照当前有效权重值从大到小的顺序对所述各数据进行排序,以获取排序集合;

遍历所述排序集合,计算所述排序集合遍历到的数据的当前有效权重值之和;

当检测到所述当前有效权重值之和不小于所述目标值时,停止对所述排序集合的遍历,将停止对所述排序集合的遍历时的数据的当前有效权重值设置为分区的随机数。

本申请又一方面提供了一种计算机设备,其包括至少一个连接的处理器、存储器和收发器,其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中的程序代码来执行上述第一方面所述的方法。

本申请又一方面提供了一种计算机存储介质,其包括指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

相较于现有技术,本申请提供的方案中,通过预先设置待存储空间的容量大小,设置待存储空间中的数据类型和目标数量;基于容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量;根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量;根据各分区内目标存储空间的数量设置各分区的随机数;将随机数和预设判断条件标记在待存储空间中的各数据上;通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。由于是根据待存储空间的大小、数据类型和各数据类型对应的数据的目标数量进行分区和对待存储空间进行同大小分配,以使各目标存储空间可按照预设相似大小进行存储数据,进而减少子存储空间之间的大小差异和相对公平地分配关联容器map资源,既能合理化和分配和保存原文件的完整性,又能平均和缩短数据处理的时间,因而,本申请能够有效地解决数据倾斜处理问题。

附图说明

图1为本申请实施例中处理数据倾斜的方法的一种流程示意图;

图2为本申请实施例中处理数据倾斜的装置的一种结构示意图;

图3为本申请实施例中计算机装置的一种结构示意图。

本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行。

本申请提供一种处理数据倾斜的方法、装置、设备及存储介质,可用于分布式系统基础架构hadoop平台任务管理,防止数据仓库工具hive数据倾斜。

为解决上述技术问题,本申请主要提供以下技术方案:

相较于现有技术,本申请提供的方案中,通过预先设置待存储空间的容量大小,设置待存储空间中的数据类型和目标数量;基于容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量;根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量;根据各分区内目标存储空间的数量设置各分区的随机数;将随机数和预设判断条件标记在待存储空间中的各数据上;通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。由于是根据待存储空间的大小、数据类型和各数据类型对应的数据的目标数量进行分区和对待存储空间进行同大小分配,以使各目标存储空间可按照预设相似大小进行存储数据,进而减少子存储空间之间的大小差异和相对公平地分配关联容器map资源,既能合理化和分配和保存原文件的完整性,又能平均和缩短数据处理的时间,因而,本申请能够有效地解决数据倾斜处理问题。

请参照图1,以下对本申请提供一种处理数据倾斜的方法进行举例说明,该方法由计算机设备执行,计算机设备可为服务器或者终端,当图2所示的装置20为应用或者执行程序时,终端为安装图2所示的装置20的终端,本申请不对执行主体的类型作限制,所述方法包括:

101、预先设置待存储空间的容量大小,设置待存储空间中的数据类型和各数据类型对应的数据的目标数量。

本申请实施例中,预先设置待存储空间的容量大小,设置待存储空间中的数据类型和各数据类型对应的数据的目标数量。例如,根据输入的业务内容中的业务需求,预先设置待存储空间所存储的容量大小为100g,设置待存储空间中存储的数据类型为表格、文字、图片、音频和视频,则设置表格、文字、图片、音频和视频对应的数据的目标数量分别为200、450、600、520和300。

102、基于容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量,待存储空间包括多个子存储空间。

本申请实施例中,预设规则为根据数据类型的数量对待存储空间进行平均分区,每个分区的大小相等或近似。根据数据类型的数量将待存储空间平均分区,得到多个子存储空间(即分区),将待存储空间的容量大小除以子存储空间的数量,得到子存储空间的大小。待存储空间为总的存储空间,对待存储空间进行分区,得到子存储空间,子存储空间对应存储同一种数据类型的数据。例如:设置的数据类型为图片、音频和视频,数据类型的数量为3,将待存储空间评分划分为3个子存储空间,设置的待存储空间的容量大小为9g,则每个子存储空间的大小为3g。

103、根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量。

本申请实施例中,根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量。可根据各子存储空间的数据类型对应的目标数量通过分区规则经各子存储空间平均划分为多个目标存储空间,各子存储空间的数据类型对应的目标数量即为各分区内目标存储空间的数量,将各子存储空间的大小除以各分区内目标存储空间的数量,得到各分区内目标存储空间的数量的大小,例如:子存储空间的大小为5g,数据类型对应的数据的目标数量为10,则通过分区规则将子存储空间划分为10个目标存储空间,根据5g的子存储空间大小和数量为10的数据的目标数量计算各目标存储空间的大小,可得各目标存储空间的大小为0.5g。其中,目标存储空间用来存储同一种数据类型中的每条数据,每个目标存储空间的大小为对应的每条数据的大小。

可选的,在本申请的一些实施例中,上述的根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,包括:

通过分区规则分析数据类型对应的目标数量,确定子存储空间的划分区域和划分数量,划分数量指示各划分区域内存储的数据的数量;

根据子存储空间的大小计算各划分区域的大小,得到各区域大小;

根据划分数量对各划分区域进行平均划分,得到各划分区域中多个目标存储空间,各划分区域对应的目标存储空间的数量和为各分区内目标存储空间的数量;

根据各区域大小计算各划分区域对应的目标存储空间的平均大小,得到各分区内目标存储空间的大小。

可根据各子存储空间的数据类型对应的目标数量通过分区规则对各子存储空间进行划分,得到各子存储空间的多个划分区域和每个划分区域存储的数据的数量,每个子存储空间的各划分区域存储的数据的数量和即为各子存储空间的数量,将子存储空间的大小除以划分区域的数量再除以每个划分区域存储的数据的数量,得到各分区内目标存储空间的大小。计算所得的在同一子存储空间中的各数据的大小为平均值,不同的目标存储空间中的各数据的大小可能存在差异。例如:子存储空间的大小为24g,数据类型对应的数据的目标数量为15,则通过分区规则将子存储空间划分为3个划分区域,分别为划分区域甲、划分区域乙和划分区域丙,划分区域甲、划分区域乙和划分区域丙的数据的目标数量分别为4、5和6,划分区域甲、划分区域乙和划分区域丙的大小均为8g,则划分区域甲的划分的目标存储空间的数量为4,每个目标存储空间的大小为2g;划分区域乙的划分的目标存储空间的数量为5,每个目标存储空间的大小为1.6g;划分区域并的划分的目标存储空间的数量为6,每个目标存储空间的大小约为1.33g,则该子存储空间的目标存储空间的数量为15,目标存储空间的大小为2g、1.6g和1.33g。

可选的,在本申请的一些实施例中,上述的根据各所述子存储空间的大小以及所述数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,包括:

获取子存储空间中键key的量级;

根据key的量级设置数量阈值,数量阈值用于指示存储于子存储空间中的目标存储空间的最大数量;

将数量阈值、子存储空间的大小和数据类型对应的目标数量作为判断项,并创建数量阈值、子存储空间的大小和数据类型对应的目标数量的对应关系;

根据判断项和对应关系建立分区规则,并根据分区规则和对应关系创建划分表;

根据对应关系遍历划分表,获得各分区内目标存储空间的大小和数量。

由于引起数据倾斜的其中一个因素是key分布不均匀,因而,通过均衡确定子存储空间中key的量级,并根据key的量级设置子存储空间中的目标存储空间的数量阈值,以使各分区可存储的目标存储空间的数量相对均衡。

各目标存储空间的大小为平均值或各数据类型对应的平均值。根据业务需求创建划分表,将上述的数量阈值、子存储空间的大小和数据类型对应的目标数量作为判断项,划分表包括数量阈值项、子存储空间的大小项、数据类型对应的目标数量项和分区数量项,通过数量阈值、子存储空间的大小和数据类型对应的目标数量中的至少一项在划分表中遍历或检索便可获取对应的目标存储空间的大小和数量。其中,进行检索的数量阈值、子存储空间的大小和数据类型对应的目标数量均与划分表的数量阈值项、子存储空间的大小项和数据类型对应的目标数量项相对应,所获取的分区数量的方案为最佳。

划分表如表1所示:

表1

上述表1仅作举例说明参考,其内容准确性和实际操作与否不作考虑。

104、根据各分区内目标存储空间的数量设置各分区的随机数,随机数包括各分区对应的分区号。

本申请实施例中,根据各分区内目标存储空间的数量设置各分区的随机数,随机数包括各分区对应的分区号。将各分区内目标存储空间的数量设置为对应的分区(即子存储空间)的随机数,其中,随机数的最小值设为1。各分区的目标存储空间的数量可能存在差异,但是各分区内的目标存储空间的容量大小基本相同。例如:各分区包括分区1和分区2,分区1的随机数为1~4,分区1内目标存储空间的数量为4,每个目标存储空间的大小均为3g,分区2的随机数为1~6,分区2内目标存储空间的数量为6,每个目标存储空间的大小均为1g。上述举例内容仅作说明参考,其内容准确性和实际操作与否不作考虑。

通过不同的分区分配不同目标存储空间数量的且目标存储空间大小相近,以使目标存储空间的数量多和存储的数据的数量多的分区能够分配多的关联容器map资源,目标存储空间的数量少和存储的数据的数量少的分区能够分配相对少的map资源,进而使分配处于合理化状态。

可选的,在本申请的一些实施例中,上述的根据各分区内目标存储空间的数量设置各分区的随机数,包括:

获取根据划分表获取的各分区内目标存储空间的数量;

将各分区内目标待存储空间的数量的值设置为各分区的随机数的最大值;

基于最大值通过随机函数生成各分区的随机数。

其中,随机函数为rand(),基于最大值通过rand()生成各分区的随机数。上述的划分表除了包括数量阈值项、子存储空间的大小项、数据类型对应的目标数量项和分区数量项。可通过上述划分表直接在上述划分表中获取对应的各分区内目标存储空间的数量,也可通过其他手段获取各分区内目标存储空间的数量。通过上述的子存储空间的大小、数据类型对应的目标数量和划分表中获取各分区内目标存储空间的数量,将各分区内目标存储空间的数量设置为对应的分区的随机数的最大值,随机数的最小值设为1。例如:根据划分表获取的各分区内目标存储空间的数量分别为分区1的目标存储空间的数量为9和分区2的目标存储空间的数量为5,则分区1的随机数为1-1、1-2、1-3......1-9,分区2的随机数为2-1、2-2、2-3......2-5。上述举例内容仅作说明参考,其内容准确性和实际操作与否不作考虑。

可选的,在本申请的一些实施例中,上述的根据各分区内目标存储空间的数量设置各分区的随机数,包括:

根据各分区内目标存储空间的数量设置各数据的配置权重值;

获取目标存储空间的各数据的当前有效权重值,并将当前有效权重值初始为配置权重值,计算各数据的配置权重值总和;

从一到配置权重值总和的值之间随机选择一个目标值,并按照当前有效权重值从大到小的顺序对各数据进行排序,以获取排序集合;

遍历排序集合,计算排序集合遍历到的数据的当前有效权重值之和;

当检测到当前有效权重值之和不小于目标值时,停止对排序集合的遍历,将停止对排序集合的遍历时的数据的当前有效权重值设置为分区的随机数。

通过运用优化的加权随机算法生成各分区的随机数,以不占用额外的空间和便捷的方式快速地生成随机数。结合各分区内目标存储空间的数量和优化的加权随机算法生成各分区的随机数。例如:以各分区中的其中一个分区(分区3)进行举例说明。分区3的目标存储空间的数量为8,目标存储空间中的数据包括a数据、b数据、c数据和d数据,a数据的当前有效权重值为6,b数据的当前有效权重值为2,c数据的当前有效权重值为1,d数据的当前有效权重值为1。在1-8中随机选择一个目标值6,则随机1-6,排序集合为{a数据:6,b数据:2,c数据:1,d数据:1},对排序集合{a数据:6,b数据:2,c数据:1,d数据:1}进行遍历,由于a数据的当前有效权重值之和6不小于目标值6,因而遍历到a数据停止遍历,以当前有效权重值6作为分区3的随机数。上述举例内容仅作说明参考,其内容准确性和实际操作与否不作考虑。

105、将预设判断条件和随机数标记在待存储空间中的各数据上,预设判断条件用于判断存储到目标待存储空间中的数据。

本申请实施例中,在随机数上标记对应的分区号,将随机数标记在待存储空间中的各数据上。通过将随机数和预设判断条件标记在待存储空间中的各数据上,以便于后续对待存储空间中的各数据的读取、存储、分类和拷贝等操作。其中,预设判断条件可为由根据业务需求进行设置的判断规则。

可选的,在本申请的一些实施例中,上述的预设判断条件,包括:

当检测到一个或一个以上的回调函数对应的数据的数量大于预设平均值时,获取回调函数对应的数据的数量为最大值对应的目标key;

将目标key重新组合成弹性分布式数据集,并在经过重新组合成弹性分布式数据集的目标key的前缀标记随机数;

将标记随机数为前缀的目标key调到多个任务中进行结合join操作以获取多个操作结果,将多个操作结果聚合;

当检测到用户表与日志表中的目标数据类型存在差异时,分别将用户表与日志表中的目标数据类型中的数字类型转换成字符串类型,其中,待存储空间包括用户表和日志表,目标数据类型指示相同数据字段的数据类型;

检测经过数据类型转换的数据是否存在空值,若是,则赋予存在空值的数据新的key值,其中,新的key值指示将空值的key转换为一个标记随机数的字符串。

分发到某一个或几个reduce上的数据远高于平均值会产生数据倾斜。通过获取回调函数reduce()对应的数据的数量大于预设平均值对应的目标key,对目标key进行处理,以解决reduce()端导致的数据倾斜。标记的随机数为上述的将各分区的目标存储空间的数量的值设置为各分区的随机数的最大值,通过随机函数rand()生成各分区的随机数。在一些实施例中,标记的随机数也可为根据其他方式设置的随机数。通过将发生数据倾斜的key的前缀标记预设随机数后单独存放到一个弹性分布式数据集(resilientdistributeddatasets,rdd)中去,将该rdd与其他rdd单独进行结合join()操作,以将key对应的数据分散到多个任务中去进行join()操作,以有效地将待存储空间中的各数据的合理地存储,进而有效地解决数据倾斜处理问题。通过将数字类型转换成字符串类型,以解决不同数据类型关联导致的数据倾斜问题。通过赋予存在空值的数据新的key值,以解决空值产生的数据倾斜问题。

可选的,在本申请的一些实施例中,上述的预设判断条件,包括:

判断执行时间是否大于预设执行时间的三分之二,其中,执行时间用于指示各数据对应的任务的执行时间,预设执行时间用于指示预设的重新分配的任务执行时间;

若执行时间大于预设执行时间的三分之二,则标记执行时间大于预设执行时间的三分之二的数据为剔除数据,并标记标签信息,标签信息存储于标记剔除数据的目标存储空间中;

判断各数据是否带有预置符号;

若各数据带有预置符号,则标记各数据中带有预置符号的数据为剔除数据,并标记标签信息,标签信息存储于标记剔除数据的目标存储空间中。

当子存储空间中的各数据对应的任务的执行时间大于预设重新分配执行任务时间的三分之二时,说明该数据运行异常或发生数据倾斜,通过将该数据存储在标记内容为剔除文件的目标存储空间中,以解决数据倾斜处理问题。其中,预置符号为‘-’符号,带有‘-’符号的数据表示没有业务意义的空的数据,通过标记存储于标记剔除文件的目标存储空间中的标签信息以将带有‘-’符号的数据单独存放在标记存储于标记剔除文件的目标存储空间中,以解决空‘-’的数据产生的数据倾斜问题。

106、通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。

本申请实施例中,通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。可通过将随机分组函数distributebyfilenumber添加至hivesql语句的末端,通过添加随机分组函数distributebyfilenumber至至末端的hivesql语句,根据待存储空间中的各数据上标记的内容将待存储空间中的各数据存储到目标待存储空间中。也可通过,将distributebyrandom_filenum中的random_filenum与spark.sql.shuffle.partitions做哈希值计算,将哈希值相同的分区的待存储空间中的各数据聚合到同一个reduce中,并根据标记的随机数和预设判断条件将与其对应的同一个reduce对应的数据存储到目标待存储空间中。

与现有机制相比,本申请实施例中,通过预先设置待存储空间的容量大小,设置待存储空间中的数据类型和目标数量;基于容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量;根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量;根据各分区内目标存储空间的数量设置各分区的随机数;将随机数和预设判断条件标记在待存储空间中的各数据上;通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。由于是根据待存储空间的大小、数据类型和各数据类型对应的数据的目标数量进行分区和对待存储空间进行同大小分配,以使各目标存储空间可按照预设相似大小进行存储数据,进而减少子存储空间之间的大小差异和相对公平地分配关联容器map资源,既能合理化和分配和保存原文件的完整性,又能平均和缩短数据处理的时间,因而,本申请能够有效地解决数据倾斜处理问题。

上述图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所提及的技术特征也同样适用于本申请中的图2和图3所对应的实施例,后续类似之处不再赘述。

以上对本申请中一种处理数据倾斜的方法进行说明,以下对执行上述处理数据倾斜的方法的装置进行描述。

如图2所示的一种处理数据倾斜的装置20的结构示意图,其可应用于分布式系统基础架构hadoop平台任务管理,防止数据仓库工具hive数据倾斜。本申请实施例中的装置20能够实现对应于上述图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所执行的处理数据倾斜的方法的步骤。装置20实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,模块可以是软件和/或硬件。装置20可包括收发模块201和处理模块202,收发模块201和处理模块202的功能实现可参考图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中所执行的操作,此处不作赘述。处理模块202可用于控制收发模块201的收发操作。

一些实施方式中,收发模块201,用于接收预先设置待存储空间的容量大小,设置所述待存储空间中的数据类型和各所述数据类型对应的数据的目标数量;

处理模块202,用于基于收发模块201接收的容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量,待存储空间包括多个子存储空间;根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量,子存储空间的数量包括多个目标存储空间;根据各分区内目标存储空间的数量设置各分区的随机数,随机数包括各分区对应的分区号;将预设判断条件和随机数标记在待存储空间中的各数据上;通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。

本申请实施例中,处理模块202通过预先设置收发模块201接收的待存储空间的容量大小,设置的待存储空间中的数据类型和目标数量;基于容量大小和数据类型根据预设规则对待存储空间进行分区得到每种数据类型对应的子存储空间的大小和数量;根据各子存储空间的大小以及数据类型对应的目标数量通过分区规则确定各分区内目标存储空间的大小和数量;根据各分区内目标存储空间的数量设置各分区的随机数;将随机数和预设判断条件标记在待存储空间中的各数据上;通过随机分组函数分析待存储空间中的各数据上标记的内容,以将各数据类型对应的数据存储到目标待存储空间中。由于是根据待存储空间的大小、数据类型和各数据类型对应的数据的目标数量进行分区和对待存储空间进行同大小分配,以使各目标存储空间可按照预设相似大小进行存储数据,进而减少子存储空间之间的大小差异和相对公平地分配关联容器map资源,既能合理化和分配和保存原文件的完整性,又能平均和缩短数据处理的时间,因而,本申请能够有效地解决数据倾斜处理问题。

可选的,在本申请的一些实施方式中,上述处理数据倾斜的方法的任一实施例或实施方式中所提及的技术特征也同样适用于本申请中的对执行上述处理数据倾斜的方法的装置20,后续类似之处不再赘述。

上面从模块化功能实体的角度分别介绍了本申请实施例中的装置20,以下从硬件角度介绍一种计算机装置,如图3所示,其包括:处理器、存储器、收发器(也可以是输入输出单元,图3中未标识出)以及存储在存储器中并可在处理器上运行的计算机程序。例如,该计算机程序可以为图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式中处理数据倾斜的方法对应的程序。例如,当计算机装置实现如图2所示的装置20的功能时,处理器执行计算机程序时实现上述图2所对应的实施例中由装置20执行的处理数据倾斜的方法中的各步骤;或者,处理器执行计算机程序时实现上述图2所对应的实施例的装置20中各模块的功能。又例如,该计算机程序可以为图1对应的实施例或图1对应的实施例中的任一可选实施例或可选实施方式的方法对应的程序。

所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。

存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现计算机装置的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

收发器也可以用接收器和发送器代替,可以为相同或者不同的物理实体。为相同的物理实体时,可以统称为收发器。该收发器可以为输入输出单元。图3中的收发器对应的实体设备可以为图2中的收发模块。

存储器可以集成在处理器中,也可以与处理器分开设置。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本申请各个实施例的方法。

上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本申请的保护之内。

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