Spark 的性能调优,算是大数据圈绕不开的话题,是开发和资源这两块,真的是挺能折腾人的。你要是刚接触 Spark,或者写了几个作业发现老是慢,那这篇基础调优的文章还挺值得一看。
开发时避免重复创建 RDD 真的关键,RDD虽然好用,但动不动就新建几个,血缘链一长,性能直接掉头走低。一个数据源搞一个RDD
就行,多个操作用链式调用,省心。
还有就是算子选得好,跑得才快。filter
提早用,map
和reduce
能少传数据就少传,尤其是大数据量的场景,不然网络 IO 直接爆表。
碰到操作重分区?试试repartition
和coalesce
,有时候换一下方法,shuffle压力就能少一大截。算是个小技巧,但挺好用的。
资源这块的调优也不能忽视,executor 数量和内存,调得不对分分钟 OOM。任务并发度、CPU 核数都得结合任务特点来配,CPU 密集的和内存密集的策略完全不一样。
动态资源分配也别忘了,集群空闲时自动回收资源,资源利用率直接提升。还有缓存策略,memory
和disk
怎么配合着用,别一股脑全塞内存里。
再往深了说,数据倾斜和shuffle 调优也挺讲究。比如groupByKey
搞不好就挂,改用reduceByKey
,或者自定义分区器,效果还不错。
如果你写 Spark 作业,发现跑得慢、资源占用高,那这篇文章真可以帮你绕过不少坑。