reduce 数据倾斜_「实战干货」解决Spark数据倾斜之消除数据倾斜的六大秘籍

老铁们,勾叔来了!!!今天,勾叔传授大家消除数据倾斜的六大秘籍~~

由于大数据的处理流程中产生数据倾斜的阶段主要是Map和Reduce两大阶段,因此我们着手消除这两个阶段产生的数据倾斜。

秘籍一

消除map端的数据倾斜

由于文件采用了不支持splittable的压缩算法或者文件大小不一致,导致map端的数据倾斜,如下:

4d81250a80ae57ffe5041f61b9b30410.png
5339b501dc5dc8bf37917c0e5fcefaa7.png

解决方案:增加数据预处理。
消除map端的数据倾斜后,接下来,勾叔与大家一起来消除reduce端的数据倾斜。

秘籍二

消除reduce端的数据倾斜之过滤异常数据

对key进行的数据特征分析,可以发现是否有异常数据:

  • null(空值)或是一些无意义的信息之类的,大多是这个原因引起
  • 无效数据,对结果影响不大的有效数据或是大量重复的测试数据
  • 正常数据,业务导致的数据分布

解决方案:对于前两种情况,我们只需要对数据进行预处理和过滤即可。

秘籍三

消除reduce端的数据倾斜之 map side join

由于正常执行join操作时,要对数据进行分区,因此不可避免的带来了shuffle。

a515c1740799c8e6c7117192152df3be.png

解决方案:如果是大表与小表做关联,可采用 map side join,彻底的消除shuffle,进而规避数据倾斜。

8677ff305d43c678d15735e392c8828d.png

秘籍四

消除reduce端的数据倾斜之改变Reduce的并行度

通过调整并行度,从而改变Shuffle过程中数据的去向,进而消除数据倾斜。

56771af5133020f886afbf5dd1ecae7c.png

秘籍五

消除reduce端的数据倾斜之两阶段聚合

  • 加盐打散key。给每个key都加一个随机数(如10以内的随机数)【加盐】,此时 key 被打散。
  • 局部聚合。对打上随机数的key,执行一次聚合操作,得到结果。
  • 全局聚合。将 key 的前缀/后缀去掉,再进行一次聚合操作,得到最终结果。
51bedc249090349bf337c3fc8018071a.png

截止到现在,老铁们一定对加盐打散key的操作有点懵,不知道该在哪里进行加盐打散key?别急,勾叔继续带大家一起往下看。

秘籍六

消除reduce端的数据倾斜之加盐打散key

通过一张图,给老铁们展示加盐打散key操作。

5f08542eef2665100c2ac757a91acb99.png

下面,结合实际场景,勾叔带大家一起来搞加盐打散key。

d7571b50ffef8e656cee4821b7265c62.png

场景再现1:

  • 在join的时候发生数据倾斜,经检测数据倾斜是由少数key的数据量大造成的;
  • 少数key相同的数据,数据量大,集中在部分分区,而无法打散。

解决方案:

  • 为数据量特别大的Key增加随机前/后缀,使得这些 Key 分散到不同的task中;
  • join的另一侧数据,找到与倾斜Key对应的部分数据,与随机前缀集作笛卡尔乘积,保证无论数据倾斜侧倾斜Key如何加前缀,都能与之进行正常Join操作;
  • join操作后,再去除随机前/后缀。

场景再现2:

在join的时候发生数据倾斜,经检测出现数据倾斜的Key比较多,则无法将这些倾斜Key分拆出来。

解决方案:

直接对存在数据倾斜的数据集全部加上随机前缀,然后对另外一个数据集整体扩容,最后再进行join操作。

9296a756e0ee5df902a10015a176ffc6.png

小结:对于数据倾斜,没有一劳永逸的方法;更多的时候,数据倾斜的产生并不是单个原因造成的,此时我们就需要结合数据源特点(数据集的特点、空值的多少、倾斜Key的多少等)、业务的特点以及数据倾斜产生的特点,将多种方案组合起来使用。勾叔希望大家要对这六大秘籍的解决思路和原理理解透彻,在实践中根据不同的情况,灵活运用多种方案,来解决相应的数据倾斜问题。

本文首发于公号 勾叔谈大数据

欢迎大家来找勾叔交流哦~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值