一文读懂spark数据倾斜

本文探讨了Spark中数据倾斜的原因,表现为部分task执行缓慢或内存溢出。通过定位shuffle算子,结合业务分析,提出多种解决方案,如数据源聚合、调整reduce并行度、随机key双重聚合、Map Join、采样倾斜key和随机数扩容Join等,以应对和缓解数据倾斜问题。
摘要由CSDN通过智能技术生成

spark中出现数据倾斜的原因?

前面分析过shuffle 的原理,主要就是按照key来进行values的数据的输出,拉取和聚合的。同一个key的value,肯定会分配到同一个reduce task进行处理的。为什么会出现数据倾斜呢,举个例子,假如多个key对应的values,一共是100万,但是可能某个key对应的value数量就已经到达了98万,占了绝大多数,另外两个key,可能各分配到了一万数据。可能两个一万数据的key对应的task两分钟就执行完了。而98万条数据对应的key就大概需要 2*98 分钟才能执行完,这就是数据倾斜。

数据倾斜的表现?

a: 大部分task很快的执行完,剩下一两个执行的特别慢
b: 执行到个别task到时候,直接内存溢出,程序崩掉

如何定位数据倾斜出现的位置?

a:去程序里面找用到shuffle算子的地方,groupBykey,countByKey,reduceByKey,join等等,根据业务场景分析算子上下游数据。
b:假如出现了oom,根据log中报错的代码位置去判断哪一个stage,task出问题了。

数据倾斜解决方案:

a:聚合数据源,

1.在进行shuffle之前,按照某种粒度,对key对应的value进行聚合,把多条数据聚合成一条数据,减少数据量。
2:对key放粗粒度度,增加key对数量,减少key对应的value数量

b:提高shuffle操作reduce的并行度

在调用shuffle算子函数的时候,传入一个并行度数量的参数,这样可以让每个r

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值