并行度的解释:
并行度:是 一个spark应用中,每个stage之中的task的数目。
什么是task:
一个spark应用任务执行的最基本单位。
还有语义比较相近的配置参数:
在提交spark 应用的时候,会进行配置的参数
--num-execuotrs 应用启动的executor的数量
--executor-cores 每个executor之中core的数量。
可以将 core 看成是一个空位,task 看成是一个人,
这里的设置的意思就是,有两个executor 每个executor上面有 2个core,
表示每次可以坐四个人,也就是可以跑4个task。
那么问题来了:
1:如何设置并行度?
2:并行度的设置 在多少较为合适?
3:如果不设置并行度,那么并行度由谁来决定?
问题1:
在sparkConf之中进行并行度的配置
问题2:
并行度的设置一般在 core * executor * (2或者3之间)。
(executor的数量 乘上 core的数量 再乘上 2到3)
并行度不是越大越好,并行度太大的话,可能会造成任务空跑,这样就白白浪费了时间和资源。
问题3:
rdd之中的分区的数目,就会称为应用的并行度。
一个RDD之中的一个partition 对应一个task任务。RDD之中由多少个分区,
那么就会相应地生成多少个task。
一个小注意点:
这里的并行度的设置 是spark core 这个模块的。
对于spark sql 可能不起作用。
然后executor的数量和core的数量的设置,就是需要看具体的机器配置,以及愿意给这个任务多少资源去跑。
所以,并行度决定了task的数量,但是值得注意的就是,如果task的数目太多,
可能某个task之中并没有数据,task只是空跑。