如何解决大数据计算中常见的数据倾斜问题?

数据倾斜是在大数据计算中常见的问题,用最通俗易懂的话来讲,数据倾斜无非就是大量的相同key被partition分配
到一个分区里,形成了'一我的累死,其余人闲死'的状况,这种状况是咱们不能接受的,这也违背了并行计算的初衷,首先
一个节点要承受着巨大的压力,而其余节点计算完毕后要一直等待这个忙碌的节点,也拖累了总体的计算时间,能够说
效率是十分低下的。
如下针对spark具体计算场景,给出数据倾斜解决方案:
场 景
当RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用group by语句进行分组聚合时,产生数据
倾斜。
出现数据倾斜缘由:
在上述分组场景中,具备相同的key的数据就会被分配到同一个组当中,从而分配到同一分区。若是某些相同key
的数据量很是大,而其余是key的数据量相对较小,此时就可能产生比较严重的数据倾斜。
解决方案
本方案经过两个阶段聚合:
阶段一
先给每一个key都打上一个随机数,好比10之内的随机数,好比(spark,1) (spark, 1) (spark, 1) (spark, 1),就会变成
(1_spark, 1) (1_spark, 1) (2_spark, 1) (2_spark, 1)。打上随机数之后,原先同样的key就变成不同的了。而后对
数据进行reduceByKey等聚合操做,局部聚合结果变成了(1_spark, 2) (2_spark, 2)。
阶段二
基于阶段一局部聚合的数据,将各个key的前缀给去掉,就会变成(spark,2)(spark,2),再次进行全局聚合操做,得
到最终结果,好比(spark, 4)。程序员

小结
数据倾斜是大数据计算中常见的问题,不少场景的计算都会出现数据倾斜的状况,而解决数据倾斜的主体思路都是
在计算过程中尽可能能将数据均匀地分配到各个分区,从而充分提升每一个计算节点的利用率,提升总体的计算效
率。本文当中是针对spark一个计算场景出现数据倾斜问题给出解决方案。大数据

更多资源请关注黑马程序员广州中心官方公号获取。spa

相关文章
相关标签/搜索