并行度:Spark 做业中,会根据 action 操做划分红多个 job,每一个 job 中会根据 shuffle 划分红多个 stage,每一个 stage 会分配多个 task 去执行,各个 stage 划分的 task 数量就表明了 Spark 做业在该 stage 的并行度。java
假设 Spark 做业的处理的数据量是不变的,这些数据会被分配到每一个 task 中去处理,在集群配置资源分配好的状况下,提高并行度,至关于分配越多的 task,这样每一个 task 分配的数据量就会越少,有助于提高执行效率。shell
固然也不是无限提高就有好处,这和 executor 分配的 core 的数量有关,每一个 core 一次只能执行一个 task,因此并行度的调整和 core 的数量有很大关系。spa
好比,咱们在 spark-submit 的 shell 脚本中配置了 50 个 executor,每一个 executor 有 10g 内存和 3 个 core。这样的配置已经达到了集群或者 yarn 资源队列的上限。这时候咱们来调整并行度,50 个 executor,每一个 executor 有 3 个 core,那么一共有 150 个 core,若是咱们这时候设置的并行度为 100 个,那么能够看出在每一个 stage 执行任务的 task 数量只有 100 个,executor 用来执行 task 的 core 还有 50 个没被利用。至关于资源被浪费了。code
1,task 的数量至少应该设置成和集群中配置的 core 数量一致。队列
2,官方推荐的是:task 的数量,设置成 core 数量的 2~3 倍。内存
这是由于:实际生产状况下,有些 task 的运行会快一点,好比 50s 就结束了,有些慢一点,好比 1 分钟,在这种状况下,避免让 core 有空闲,形成资源浪费,能够让 task 的数量多一点,这样能够让结束较快的 task 对应的 core 不会空闲下来。资源
3,设置方式:string
SparkConf conf = new SparkConf()
.set("spark.default.parallelism", "500")
.xxx
复制代码