文章目录
前言
- spark性能调优
- spark数据倾斜
- spark故障排除
一、spark性能调优
1.常规性能调优
- 最优资源配置
- RDD优化
- RDD复用
- RDD持久化
- RDD尽可能早的filter操作
- 并行度调节
- 广播变量
- Kryo序列化
- 调节本地化等待时长
2.算子调优
3.Shuffle调优
- 调节map端缓冲区大小
- 调节reduce端拉取数据缓冲区大小
- 调节reduce端拉取数据重试次数
- 调节reduce端拉取数据等待间隔
- 调节SortShuffle排序操作阈值
4.JVM调优
- 降低cache操作的内存占比
- 调节Executor堆外内存
- 调节连续等待时长
二、spark数据倾斜
spark数据倾斜问题主要是指shuffle过程中出现的数据倾斜问题,是由于不同的key对应的数据量不同导致的不同task所处理的数据量不同的问题。要注意区分数据倾斜和数据量过大的情况:数据倾斜是指少数的task被分配了绝大多数数据;数据过量是指所有的task被分配的数据量都很大。
1.数据倾斜的表现:
- Spark作业的大部分task都执行迅速,只有有限的几个task执行的非常慢,此时可能出现了数据倾斜
- Spark作业的大部分task都执行迅速,但是有的task在运行过程中会突然报出OOM,反复执行几次都在某一个task报出OOM错误,此时可能出现了数据倾斜
2.定位数据倾斜:
- 查阅代码中的shuffle算子,根据代码逻辑判断此处是否会出现数据倾斜
- 查看Spark作业的log文件,log文件对于错误的记录会精确到代码的某一行,可以根据异常定位到的代码位置来判定错误发生在第几个stage,对应的shuffle算子是哪一个。
3.解决数据倾斜方案:
- 聚合原数据
- 避免shuffle过程
- 增大key的粒度(可能会减小数据倾斜的可能性,但是某些场景下不适用)
- 过滤导致倾斜的key
- 提高shuffle操作中的reduce并行度
- 使用随机key实现双重聚合
- 将reduce join转换成map join
- sample采样对倾斜key单独进行join
- 使用随机数扩容进行join
三、spark故障排除
- 控制reduce端缓冲区大小以避免OOM
- JVM GC导致的shuffle文件拉取失败
- 解决各种序列化导致的报错
- 解决算子函数返回NULL导致的问题
- 解决YARN-CLIENT模式导致的网卡流量激增问题
- 解决YARN-CLUSTER模式的JVM栈内存溢出无法执行的问题
- 解决Sparksql导致的JVM栈内存溢出
- 持久化与checkpoint的使用
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。