Spark的并行度是决定Spark程序执行效率非常重要的因素。资源充足情况下,一般并行度越高, 执行效率越高。
Spark的并行度主要决定于如下的两个因素:
1. 资源因素.
由提交任务时, 所申请的Executor数量 和 CPU核数, 内存来决定的.
2. 数据因素.
数据的大小, 对应分区数量 以及Task线程.
当申请的资源比较大的时候, 如果数据量不大, 这样虽然不会影响执行效率, 但是会造成资源浪费.
当申请的资源比较小的时候, 如果数据量比较大, 会导致没有相应的资源来执行, 本来是能并行执行的, 变成了串行, 影响整个执行效率.
如何调整并行度呢?
调整的标准: 在合适的资源上, 运行合适的任务, 产生合适的并行度.
除了给出一些经验值以外, 更多的还需要我们不断的调试.
经验值:
1个CPU核上运行 2 ~ 3个线程, 1个CPU对应内存大小为 3 ~ 5GB
手动设置:
conf.set("spark.defalut.parallelism", 4) 设置并行度为4