Spark性能优化总结

本文提供了一套全面的Spark性能优化方案,包括开发调优、资源调优、数据倾斜调优和Shuffle调优四大方面。重点介绍了如何通过优化代码逻辑减少资源消耗、解决数据倾斜问题及调整Shuffle参数来提升Spark任务的执行效率。

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

注:

本文是根据以下两篇文章进行的总结。

https://tech.meituan.com/spark-tuning-basic.html

https://tech.meituan.com/spark-tuning-pro.html


Spark性能优化总结

1          开发调优

1.1         原则一:避免创建重复的RDD

1.2         原则二:尽可能复用同一个RDD

1.3         原则三:对多次使用的RDD进行持久化

1.4         原则四:尽量避免使用shuffle类算子

1.5         原则五:使用map-side预聚合的shuffle操作

1.6         原则六:使用高性能的算子

1.7         原则七:广播大变量

1.8         原则八:使用Kryo优化序列化性能

1.9         原则九:优化数据结构

2          资源调优

2.1         num-executors

2.2         executor-memory

2.3         executor-cores

2.4         driver-memory

2.5         spark.default.parallelism

2.6         spark.storage.memoryFraction

2.7         spark.shuffle.memoryFraction

3          数据倾斜调优

3.1         定位导致数据倾斜的代码

3.1.1    某个task执行特别慢的情况

3.1.2    某个task莫名其妙内存溢出的情况

3.2         查看导致数据倾斜的key的数据分布情况

3.3         数据倾斜的解决方案

3.3.1    使用Hive ETL预处理数据

3.3.2    过滤少数导致倾斜的key

3.3.3    提高shuffle操作的并行度

3.3.4    两阶段聚合(局部聚合+全局聚合)

3.3.5    将reduce join转为map join

3.3.6    采样倾斜key并分拆join操作

3.3.7    使用随机前缀和扩容RDD进行join

3.3.8    多种方案组合使用

4          Shuffle 调优

4.1         ShuffleManager发展概述

4.1.1    HashShuffleManager

4.1.1.1   未经优化的HashShuffleManager

4.1.1.2   优化后的HashShuffleManager

4.1.2    SortShuffleManager

4.1.2.1   普通运行机制

4.1.2.2   bypass运行机制

4.1.3    shuffle相关参数调优

4.1.3.1   spark.shuffle.file.buffer

4.1.3.2   spark.reducer.maxSizeInFlight

4.1.3.3   spark.shuffle.io.maxRetries

4.1.3.4   spark.shuffle.io.retryWait

4.1.3.5   spark.shuffle.memoryFraction

4.1.3.6   spark.shuffle.manager

4.1.3.7   spark.shuffle.sort.bypassMergeThreshold

4.1.3.8   spark.shuffle.consolidateFiles


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值