解决大数据计算过程中数据倾斜的方法技术

技术编号:14355287 阅读:288 留言:0更新日期:2017-01-08 22:34
本发明专利技术提出了一种解决大数据计算过程中数据倾斜的方法,包括以下步骤:分析每天数据的主键的量级,设定一个阈值D,得到每个主键下的数据的分组数量N;根据每个主键的阈值D和分组数量N,得到主键分组生成码表;当进行数据分析或处理时,查询之前生成好的主键分组生成码表,给每个数据的主键加上一个1到分组数量N之间的随机数作为新主键,最终完成第一次分组;最终完成数据处理;根据原始的主键进行第二次分组,并统计最终分组结果。本发明专利技术无需增加硬件成本,对shuffle操作导致的数据倾斜有着明显的作用,通常可以解决数据倾斜问题,或者至少是大幅度缓解数据倾斜,将Spark作业的性能提高。

【技术实现步骤摘要】

本专利技术涉及大数据
,特别涉及一种解决大数据计算过程中数据倾斜的方法
技术介绍
大数据倾斜产生的原因:在进行shuffle的时候,必须将各个节点上相同的key拉取到某个节点上的一个task来进行处理,比如按照key进行聚合或join等操作。此时如果某个key对应的数据量特别大的话,就会发生数据倾斜。比如大部分key对应10条数据,但是个别key却对应了100万条数据,那么大部分task可能就只会分配到10条数据,然后1秒钟就运行完了;但是个别task可能分配到了100万数据,要运行一两个小时。因此,整个Spark作业的运行进度是由运行时间最长的那个task决定的。目前,大多数的大数据产品在解决数据倾斜的问题上,都采用增加物理资源(CPU,内存)、手动调整shuffle并行度参数、过滤掉少数导致数据倾斜的KEY、以及通过分区(Partitioning)等手段解决数据倾斜问题。增加物理资源(CPU,内存)会增加投入成本,而且当数据量足够大时,还是会导致内存溢出。调整shuffle并行参数及分区治标不治本,数据达到一定量级时还是会产生数据倾斜。过滤掉少数导致数据倾斜的KEY,这种方法应用的场景比较少,毕竟大多数情况下,导致数据倾斜的KEY还是很多的,大量过滤对数据准确性有影响。
技术实现思路
本专利技术的目的旨在至少解决所述技术缺陷之一。为此,本专利技术的目的在于提出一种解决大数据计算过程中数据倾斜的方法,解决某些task分配的数据量特别大,产生数据倾斜,效率过低等问题。为了实现上述目的,本专利技术提供一种解决大数据计算过程中数据倾斜的方法,包括以下步骤:步骤S1,分析每天数据的主键的量级,设定一个阈值D,得到每个主键下的数据的分组数量N;步骤S2,根据每个主键的阈值D和分组数量N,得到主键分组生成码表,每次进行数据分析或处理时查询此表,根据相应的分组数量N对数据进行分组;步骤S3,当进行数据分析或处理时,查询之前生成好的主键分组生成码表,给每个数据的主键加上一个1到分组数量N之间的随机数作为新主键,将新主键相同的数据分为一组,分为N组,最终完成第一次分组;步骤S4,对第一次分组后的数据,采用不同task任务处理新主键不同的数据,同一task任务处理新主键相同的数据,最终完成数据处理;步骤S5,对上述处理后的数据,去除新主键后面所加的随机数,得到数据原始的主键,根据原始的主键进行第二次分组,并统计最终分组结果。进一步的,所述阈值D为经验值。进一步的,所述主键分组生成码表由多个主键及该主键所对应的阈值D和分组数量N组成。进一步的,在步骤S1中,阈值D与分组数量N之间的关系为:当阈值D大于数据数量M时,不进行分组,则分组数量N=1;当阈值D小于数据数量M时,进行分组,则分组数量N>1,且N=M/D;其中,数据数量M为每个主键下的数据的个数,分组数量N为每个主键下的数据的分组数,阈值D为通过经验所得到的值。进一步的,在步骤S3中,第一次分组采用以下步骤:将主键后面加上一个1到分组数量N之间的随机数,生成新的主键;将原始数据根据新的主键分成N组;将N组数据,以组为单位分配到多个task任务中进行数据处理。进一步的,所述第一次分组和第二次分组均根据主键是否相同进行分组。本专利技术解决大数据计算(基于Spark)中,特别是数据量较大的数据,如果某些主键(即Key值)对应的数据量特别大,而一些主键(Key值)对应的数据量较小,在对主键(Key值)进行聚合或join等操作时,task分配数据量不均,导致某些task分配的数据量特别大,产生数据倾斜,效率过低等问题。本专利技术无需增加硬件成本,对shuffle操作导致的数据倾斜有着明显的作用,通常可以解决数据倾斜问题,或者至少是大幅度缓解数据倾斜,将Spark作业的性能提高。在实际生产环境中,每天甚至每小时都会产生大量数据,通过此方法,可提高资源的利用率并提高成产中的输出效率。本专利技术附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本专利技术的实践了解到。附图说明本专利技术的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:图1为本专利技术的整体流程图;图2为本专利技术的分组流程图。具体实施方式下面详细描述本专利技术的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本专利技术,而不能理解为对本专利技术的限制。本专利技术提供一种解决大数据计算过程中数据倾斜的方法,参考附图1,包括以下步骤:步骤S1,分析每天数据的主键(即Key值)的量级,设定一个阈值D(阈值D为经验值);得到每个主键(Key值)下的数据的分组数量N;其中,阈值D与分组数量N之间的关系为:当阈值D大于数据数量M时,不进行分组,则分组数量N=1;当阈值D小于数据数量M时,进行分组,则分组数量N>1,且N=M/D;其中,数据数量M为每个主键下的数据的个数,分组数量N为每个主键下的数据的分组数,阈值D为通过经验所得到的值。步骤S2,根据每个主键的阈值D和分组数量N,得到主键分组生成码表,每次进行数据分析或处理时查询此表,根据相应的分组数量N对数据进行分组;其中,主键分组生成码表由多个主键及该主键所对应的阈值D和分组数量N组成。步骤S3,当进行数据分析或处理时,查询之前生成好的主键分组生成码表,给每个数据的主键加上一个1到分组数量N之间的随机数作为新主键,将新主键相同的数据分为一组,分为N组,最终完成第一次分组;具体来讲,第一次分组采用以下步骤:将主键后面加上一个1到分组数量N之间的随机数,生成新的主键;将原始数据根据新的主键分成N组;将N组数据,以组为单位分配到多个task任务中进行数据处理。步骤S4,对第一次分组后的数据,采用不同task任务处理新主键不同的数据,同一task任务处理新主键相同的数据,最终完成数据处理;步骤S5,对上述处理后的数据,去除新主键后面所加的随机数,得到数据原始的主键,根据原始的主键进行第二次分组,并统计最终分组结果。其中,第一次分组和第二次分组均根据主键是否相同进行分组。图2为第一次和第二次分组流程图。下面举例在描述:比如,查询qq.com码表中记录的分组数量为100,则在进行分组统计时,将Key值变换为qq.com+‘\\0’+random.randint(1,100),即将Key值变为域名加上一个1-100的随机数。原数据分组会转换为如下形式:qq.com+‘\\0’+1qq.com+‘\\0’+2.......qq.com+‘\\0’+100这100个分组会分配到多个task进行统计,而不会产生一个task统计百万条级别的数据的情况。现有方法中,大多是通过提高硬件或者调节配置来提高效率或规避数据倾斜产生的代价,但是提高硬件会增加成本,虽然Spark的map、reduce过程通过增加内存以及CPU会提高效率,但是并不是线性增加的。修改参数只能让Spark进入一个较好的工作状态,只能缓解,当数量达到一个量级时,数据倾斜是无法避免的。本专利技术关注Spark本身的特质,通过充分利用资源,增加分组,不会产生某一个task下的数据量特别本文档来自技高网...
解决大数据计算过程中数据倾斜的方法

【技术保护点】
一种解决大数据计算过程中数据倾斜的方法,其特征在于,包括以下步骤:步骤S1,分析每天数据的主键的量级,设定一个阈值D,得到每个主键下的数据的分组数量N;步骤S2,根据每个主键的阈值D和分组数量N,得到主键分组生成码表,每次进行数据分析或处理时查询此表,根据相应的分组数量N对数据进行分组;步骤S3,当进行数据分析或处理时,查询之前生成好的主键分组生成码表,给每个数据的主键加上一个1到分组数量N之间的随机数作为新主键,将新主键相同的数据分为一组,分为N组,最终完成第一次分组;步骤S4,对第一次分组后的数据,采用不同task任务处理新主键不同的数据,同一task任务处理新主键相同的数据,最终完成数据处理;步骤S5,对上述处理后的数据,去除新主键后面所加的随机数,得到数据原始的主键,根据原始的主键进行第二次分组,并统计最终分组结果。

【技术特征摘要】
1.一种解决大数据计算过程中数据倾斜的方法,其特征在于,包括以下步骤:步骤S1,分析每天数据的主键的量级,设定一个阈值D,得到每个主键下的数据的分组数量N;步骤S2,根据每个主键的阈值D和分组数量N,得到主键分组生成码表,每次进行数据分析或处理时查询此表,根据相应的分组数量N对数据进行分组;步骤S3,当进行数据分析或处理时,查询之前生成好的主键分组生成码表,给每个数据的主键加上一个1到分组数量N之间的随机数作为新主键,将新主键相同的数据分为一组,分为N组,最终完成第一次分组;步骤S4,对第一次分组后的数据,采用不同task任务处理新主键不同的数据,同一task任务处理新主键相同的数据,最终完成数据处理;步骤S5,对上述处理后的数据,去除新主键后面所加的随机数,得到数据原始的主键,根据原始的主键进行第二次分组,并统计最终分组结果。2.如权利要求1所述的解决大数据计算过程中数据倾斜的方法,其特征在于:所述阈值D为经验值。3.如权利要求1所述的解决...

【专利技术属性】
技术研发人员:崔隆
申请(专利权)人:飞思达技术北京有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1