Saprk数据倾斜七解决方案(二)

 2、过滤少数导致倾斜的key

  • 方案适用场景:如果发现导致倾斜的key就少数几个,而且对计算本身影响并不大的话,那么很适合适用这种方案,比如99%的key对应10条数据,只有一个key对应100万条数据,从而导致的数据倾斜。
  • 方案实现思路:如果我们判断那少数几个数据量特别多的key,多作业的执行和计算的结果不是特别重要的话,那么干脆就直接过滤掉那少数几个key。比如在Spark SQL中使用where子句过滤掉这些key或者在Spark Core中对RDD执行filter算子操作过滤掉这些key。如果需要每次作业执行时动态判定那些key的数量最多然后在进行过滤,那么可以使用sample算子对RDD进行采样,然后计算出每个key的数量,取数据量最多的key过滤掉即可。
  • 方案实现原理:将导致数据倾斜的key过滤掉之后,这些key就不会参与计算,自然就不会导致数据倾斜


 3、提高shuffle操作的并行度

  • 方案实现思路:在对RDD执行shuffle算子时,给shuffle传入一个参数,比如reduceByKey(1000),这个参数决定这个shuffle read task的数量,对于Spark SQL中的shuffle类语句,比如group by ,join等,需要设置一个参数,即spark.sql.shuffle.partitions,该参数代表shuffle read task的并行度,该值默认是200,对于很多场景来说有点过小。
  • 方案实现原理:增加shuffle read task的数量,可以让原本分配给一个task的多个key分配给多个task,从而让每个task处理比原来更少的数据。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值