解决大数据Spark开发过程中的数据倾斜问题

一、遇到的问题场景:
RDD可以通过hash进行分区,通过其给的key的值,计算其hashcode,并除以分区的个数取余,如果余数小于0,则用余数+分区的个数,最后返回的这个值就是key所属的分区号。

HashPartitioner分区弊端:可能导致每个分区中数据量的不均匀,极端情况下会导致某些分区拥有RDD的全部数据(数据倾斜) hash大量碰撞的结果
在这里插入图片描述二、解决方法
1.可以预聚合 如果(hello,1)有80万条数据 提前预聚合 然后80万条数据就变成1条数据了 ,这时再进行hash分区(不会都放在一个分区里面) 这样就不会有数据倾斜的问题了

2.不能用预聚合(groupByKey处理数据) A、D、G都有100万条数据 按照key进行hash分区就会造成数据倾斜问题。
理想状态是A的100万条数据都进入0分区 D的100万条数据都进入1分区 G的100万条数据都进入2分区
这时候不使用hash分区了 先对key走wordCount预聚合 看key是不是多的那100万条数据 取key的top10或者topic3 这时候自定义分区器 如果A的key放到0号分区 如果是D的key放到1号分区 如果是G的key放到2号分区

3.如果只有A的key有300万条数据 可以自定义分区器 可以给A 写一个随机数 让A的key随机放到三个分区里 ,有一个问题并没有聚合在一起,在三个分区里
第二种让A的key和字符串进行拼接成(A1、A2、A3…) 然后让A1走1号分区 A2走2号分区 A3走3号分区,然后在下游还是需要聚合一下
三、大概步骤截图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值