spark调优,调节并行度

spark并行度指的是什么?

并行度:其实就是指的是,spark作业中,各个stage的task数量,也就代表了sprark作业的各个阶段(stage)的并行度。

如果不调节,那么导致并行度过低,会怎么样?

假设,现在已经在spark-submit脚本中给我们的spark作业分配了足够的资源,比如50个executor,每个executor有10G内存,每个executor有3个cpu core.基本已经达到了集群或者yarn队列的资源上限制。

 

task没有设置,或者设置少,比如设置了100个task,50个executor,每个executor有3个cpu core,也就是说,你的Application任何一个stage运行的时候,都有总数在150个cpu core,可以并行运行。但是你现在,只有100个task,平均分配一下,每个executor分配到2个task,ok,那么同时在运行的task就只有100个,每个executor只会并行运行2个task,每个executor剩下的一个cpu core,就浪费掉了。

 

你的资源分配足够了,但是,并行度没有与资源相匹配,导致你分配下去的资源都浪费掉了。

合理的并行度的设置,应该是设置足够大,大到可以完全合理的利用你的集群资源;比如你上面的例子,总共集群有150个cpu core,可以并行运行150个task,那么就应该将你的app的并行度设置成150,才能完全有效的利用你的集群资源,让150个task,而且task增加到150个以后,即可以同时并行运行,还可以让每个task要处理的数据量变少;比如总共150G的数据要处理,如果是100个task,那么每个task要计算1.5G数据;现在增加到150个task,可以并行运行,那么每个task就处理1G的数据就可以

 

1. task数量,至少设置成与spark application的总cpu core数量相同(最理想的情况,比如总共有150个cpu core,分配了150个task,一起运行,差不多同一时间运行完毕)

2. 官方推荐,task数量,设置成spark application总cpu core的数量的2~3倍,比如150个cpu core,基本要设置task数量为300~500;实际情况,与理想情况不同的,有些task会运行的快一点,比如50s就完了,有些task,可能会慢一点,要1分半才运行完,所以如果你的task数量,刚好设置的跟cpu core数量相同,可能还是导致资源的浪费,因为,比如150个task可能10个先运行完了,其他140个还在运行,那么10个cpu core 先空闲,就导致浪费,那如果task数量设置成cpu core总数的2~3倍,那么一个task运行完了后,另一个task马上可以补上来,就尽量不要让cpu core补上来,同时也是尽量提升spark作业运行的效率和速度,提升性能。

3. 如何设置一个spark application的并行度?

spark.default.parallelism  这个在创建spark conf的时候就可以设置

new SparkConf()

   .set("spark.default.parallelism","500"),这个是150个并行度的设置方法

你可能感兴趣的:(spark)