Spark Executor数量设置
我们知道Spark application的运行单元是task,资源分配单元是executor。task数的多少是和RDD的分区数相关的,整个application的并行度是 Executor数 * Task。这里整理一下executor的个数是如何设置的。
我们通常都使用spark-submit 来提交任务,对于不同的部署模式,需要使用不同的参数来指定executor数,实际生产环境中最常使用的部署模式就是 ON YARN 和 Standalone两种模式。
Spark ON YARN
ON YARN模式下可以使用选项 –num-executors 来直接设置application的executor数,该选项默认值是2.。 该选项对应的配置参数是 spark.executor.instances
如下,我们可以在启动spark-shell时指定executor数
$ spark-shell --num-executors 5
通过web监控页面可以看到有5个executor
20190409210940936.png
Spark Standalone
在standalone模式下,并没有参数直接指定使用多少个executor数。而是按照如下方式计算而来
executor 数量 = spark.cores.max/spark.executor.cores
spark.cores.max 默认没有设置,这时它使用的是 spark.deploy.defaultCores,而这个的默认值是Int.max,也就是不限制,这样应用就会获取所有可用的CPU资源,所以为了限制应用程序使用CPU资源,用户需要设置spark.core.max配置项,约束每个应用程序所能申请的最大CPU核数。
spark.executor.cores 该参数用以设置每个executor使用的CPU资源,在 ON YARN模式下,默认是1,而standalone模式下是worker节点上所有可用的CPU的资源,显然在实际生产环境中,这样做也不合理,因此需要设置spark.executor.cores配置项,用于设置在standalone模式下每个Executor使用的CPU核数。
最后补充说明一下单个executor的资源配置,也就是一个executor使用的CPU和内存资源
选项 –executor-memory 可以指定每个executor的内存,默认是 1G,对应的配置项是 spark.executor.memory,该配置项默认单位是MB,也可以显示指定单位 (如2g,8g)
选项 –executor-cores (适用于ON YARN和standalone模式) 可以指定每个executor的内存,对应的配置项是 spark.executor.cores