Spark数据倾斜

数据倾斜是指在分布式计算中,部分任务由于特定原因执行时间远超其他任务,导致整个作业延迟。常见原因包括空值、不同key类型、大文件和shuffle过程。解决办法包括数据预处理、增加shuffle并行度、使用mapjoin、双重聚合等策略。通过对数据的优化和调整,可以有效缓解数据倾斜问题,提高Spark作业的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是数据倾斜

当某个任务相较于其他任务来说,迟迟执行不完时,很可能就是产生了数据倾斜。

比如,绝大部分任务十几秒中就执行完成了,而个别任务一小时甚至更久还没有执行完成。spark任务执行结束取决于最晚结束执行的stage。

stage的划分可以简单的理解为:遇到宽依赖是当前stage的结束,也是下一个stage的开始。

宽依赖(Wide Depencency,也称为Shuffle Depencency):子任务需要依赖父任务的全部分区。

窄依赖(narrow dependency):父RDD的一个分区只对应一个子RDD分区。

Spark数据倾斜产生的几种原因

  1. 空值导致的数据倾斜
  2. join的key类型不同导致的数据倾斜
  3. 大文件无法拆分导致的数据倾斜
  4. shuffle过程导致的数据倾斜

数据倾斜解决方案

  1. 过滤掉值为null,或者不符合业务场景的脏数据
  2. 检查所有的查询都预先过滤掉不需要的数据,保证对最小的数据集做处理
  3. ETL预先聚合一部分数据,再到spark做处理
  4. reduce join改为map join,map join会将小表进行广播,避免shuffle操作
  5. 曾加shuffle并行度
  6. 使用随机key实现双重聚合(groupByKey、reduceByKey比较适合使用这种方式),先给key新增随机前缀,变成多个不同的key,分到不同的task上做处理,做局本部聚合,后面再去除前缀重新聚合

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值