一、什么是spark的并行度?
1,数据并行(逻辑并行)
就是同时执行,spark中的每一个作业都相当于一个application,每个application执行时会生成很多job,一个action操作触发一个job时,每个job就会拆分为多个stage,发生shuffle时就会多拆分出来一个,这个就是数据的并行
2,资源的并行度(物理并行)
主要是由excutor,和cpu核数确定
注意:必须要调整并行度,不然会影响运行效率,不合理的分配资源
二、怎么去优化,提供并行度?
1,task数量
官方给出的建议是task数量是cpu core的2~3倍
只有task足够的多才能更好的利用资源,但是如果task很多的话,资源少,那么就会先执行一批后再执行下一批
task = cpu core 这样也会导致快的task执行结束后,一些资源就会处于等待状态,浪费资源
具体如何设置呢?
task分为map 的task 还设有reduce洗牌的task
- map的task: spark.default.parallelism
- reduce的task:spark.sql.shuffle.partitions