Spark 优化
资源调优
1. 阻塞间隔
有一个配置参数:spark.streaming.blockInterval,它的意思是每间隔多少秒后,Spark才把接收到的数据组成数据块存到Spark中。官网推荐的最小值是50ms,默认值200ms。假设实例化InputDStream时设置的Duration(batch interval)为1秒(1000ms),那么任务执行时,总共有 1000 / 200 = 5 个block,每个block将对应一个task。如果task的数量少于每台机器配置的core的数量,则说明资源没有被很好的利用。应减少 spark.streaming.blockInterval 或增加batch interval。
注意:官网并没有说要使得task的数量和core的数量一致。能想到两个的原因:(1)receiver也会占用core (2)driver也会占用core
2. 设置正确的Batch Interval
每个时间间隔提交的job应该能处理完这个时间间隔内收到的数据。可以通过Web UI 去查看批处理的时间是否小于interval
3. executors , 内存 核心数等 分配
可以先设置的比较大,然后根据spark 的Web UI 来确定合适的资源分配.
代码调优
避免创建重复的RDD, 尽可能复用RDD,对多次使用的RDD进行持久化
数据倾斜
美团解决数据倾斜的方案
https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
参考链接
- spark调优指南,8各个方面 https://zhuanlan.zhihu.com/p/54293797
- 美团spark性能优化基础篇 https://tech.meituan.com/2016/04/29/spark-tuning-basic.html
- 美团spark性能优化高级篇 https://tech.meituan.com/2016/05/12/spark-tuning-pro.html
未完待续…