spark数据倾斜的解决思路

数据倾斜是:多个分区中,某个分区的数据比其他分区的数据多的多

数据倾斜导致的问题:

  1. 导致某个spark任务耗时较长,导致整个任务耗时增加,甚至出现OOM
  2. 运行速度慢:主要发生在shuffle阶段,同样的key的数据太多了,导致了某个key所在的task需要处理的数据量太大了,远超其他的task的处理时间
    一条经验:一般出现运行速度异常慢,或者OOM的主要原因是数据倾斜

数据倾斜的解决方案:

  1. 过滤不需要的key:有些key是脏数据,直接过滤,降低数据量
  2. 调整并行度:增大partition的数量,这个每个task要处理的数据量就降低了,各个key可以均匀的分配到多个partition中。但是如果某个key的数据量就是很多,还是会出现数据倾斜
  3. 将reduce侧的join转化为map侧join:如用reduceBykey来替换groupByKey,让map侧也发生aggr聚合,减少shuffle的数据量
  4. 随机前缀扩容:如果某个key就是很多,在此key之前加随机数,来打散key,然后聚合
  5. 如果在加载数据时就发生了数据倾斜,可以在加载后进行repartition
  6. 对于join数据倾斜,一般是小表join大表,用map join ,避免reduce join(shuffle join)
    总结:一般在shuffle时容易发生数据倾斜,因此主要思路是降低shuffle的量

spark的map join 和reduce join的区别?

都是将2个数据集进行join连接的操作,但是实现方式不同

  1. map join:小表join 大表, 将小表通过广播的方式,广播到所有excutors节点的内存中,然后在每个excutor节点上将大数据和小数据进行连接,这样可以快速连接,从而提高了join的效率;优点:由于将小数据加载到内存中,join的速度很快;缺点:由于数据会加载到内存中,会导致内存溢出的问题。
  2. reduce join : 大表join大表, 将2个数据集都进行分区,然后将相同的key的数据分发到同一个节点上进行连接操作。因为同一个key的数据被分发到同一个节点上,所以每个节点只需要处理一部分数据,从而减少了每个节点需要处理的数据量,提高了join的效率;优点:通过分布式的方式能够处理大数据集; 缺点:需要进行shuffle网络传输,如果传输速度较慢,可能会导致连接操作的效率较低。
相关推荐
qq_124987075333 分钟前
基于SpringCloud的分布式演唱会抢票系统(源码+论文+部署+安装)
分布式·spring·spring cloud·毕业设计·计算机毕业设计
vx-bot55566638 分钟前
1024proxy现代对抗性环境下的分布式流量调度系统架构设计
分布式·系统架构
零售ERP菜鸟2 小时前
IT价值证明:从“成本中心”到“增长引擎”的确定性度量
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
叫我:松哥2 小时前
基于大数据和深度学习的智能空气质量监测与预测平台,采用Spark数据预处理,利用TensorFlow构建LSTM深度学习模型
大数据·python·深度学习·机器学习·spark·flask·lstm
珠海西格电力8 小时前
零碳园区有哪些政策支持?
大数据·数据库·人工智能·物联网·能源
LJ97951118 小时前
AI如何重构媒介宣发:从资源博弈到智能匹配的技术跃迁
大数据
数据皮皮侠AI10 小时前
上市公司股票名称相似度(1990-2025)
大数据·人工智能·笔记·区块链·能源·1024程序员节
Zoey的笔记本10 小时前
金融行业数据可视化平台:破解数据割裂与决策迟滞的系统性方案
大数据·信息可视化·数据分析
2501_9336707910 小时前
大数据与财务管理专业就业岗位方向
大数据
小龙11 小时前
【Git 报错解决】本地分支与远程分支名称/提交历史不匹配
大数据·git·elasticsearch·github