Spark性能优化概览
由于Spark的计算本质是基于内存的,所以Spark性能程序的性能可能因为集群中的任何因素出现瓶颈:CPU、网络带宽、或者是内存。如果内存能够容纳得下所有的数据,那么网络传输和通信就会导致性能出现瓶颈。但是如果内存比较紧张,不足以放下所有的数据(比如在针对10亿以上的数据量进行计算时),还是需要对内存的使用进行性能优化的,比如说使用一些手段来减少内存的消耗。
Spark性能优化,其实主要就是在于对内存的使用进行调优。因为通常情况下来说,如果你的Spark应用程序计算的数据量比较小,并且你的内存足够使用,那么只要运维可以保障网络通常,一般是不会有大的性能问题的。但是Spark应用程序的性能问题往往出现在针对大数据量(比如10亿级别)进行计算时出现,因此通常来说,Spark性能优化,主要是对内存进行性能优化。当然,除了内存调优之外,还有很多手段可以优化Spark应用程序的性能。
Spark性能优化技术
Spark的性能优化,主要手段包括:
- 使用高性能序列化类库
- 优化数据结构
- 对多次使用的RDD进行持久化 / Checkpoint
- 使用序列化的持久化级别
- Java虚拟机垃圾回收调优
- 提高并行度
- 广播共享数据
- 数据本地化
- reduceByKey和groupByKey的合理使用
- Shuffle调优(核心中的核心,重中之重)