
文章目录
二、standalone-client指定每个executor使用1core和1G内存
三、standalone-client指定每个executor使用1core和2G内存
四、standalone-client指定最多使用集群中2个core用于启动executor
六、Standalone-cluster指定Driver使用2Core和2G内存
Spark任务资源之Standalone集群测试
下面以向 Standalone 集群提交 Spark Pi 任务为例,演示不同提交参数下集群资源的使用情况。通过对比 Driver 与 Executor 的启动位置、core 与内存的分配结果,可以更直观地理解 Spark on Standalone 的资源调度规则。
测试环境为 2 台 Worker 节点,每台 Worker 节点配置 2 core 和 3G 内存,因此集群总资源为 4 core 和 6G 内存。
bash
#启动Spark Standalone集群
[root@node1 ~]# cd /software/spark-3.5.5/sbin/
[root@node1 sbin]# ./start-all.sh
通过WebUI查看Standalone集群资源如下:

一、Standalone-client默认
Standalone-client 模式默认提交 Spark Application 时,Driver 在客户端本地启动,不占用集群资源;集群中所有 core 都会被用来启动 Executor,每个 Executor 默认使用所在 Worker 节点的全部 core 和 1G 内存。
Standalone-client提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
提交任务后,可以通过WebUI查看当前Application使用资源情况:

二、standalone-client指定每个executor使用1core和1G内存
通过参数 --executor-cores 指定每个 Executor 使用的 core 数量,通过参数 --executor-memory 指定每个 Executor 使用的内存大小。需要注意,此时 Spark Application 仍会占用集群中所有 core 资源,只是把 core 拆分到更多 Executor 上。
Standalone-client提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--executor-cores 1 \
--executor-memory 1G \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
提交任务后,可以通过WebUI查看当前Application使用资源情况,可以看到程序使用了集群中所有worker的core资源,在每个Worker节点上启动了2个Executor,每个Executor按照指定的参数使用了1core和1G内存。

三、standalone-client指定每个executor使用1core和2G内存
Standalone-client提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--executor-cores 1 \
--executor-memory 2G \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
提交任务后,可以通过WebUI查看当前Application使用资源情况,可以看到程序尝试使用每台Worker全部的core资源,但是由于指定启动每个Executor使用2G内存,此刻每台Worker节点内存只能启动1个Executor(1core+2G),每个Worker节点剩余1Core和1G内存。

四、standalone-client指定最多使用集群中2个core用于启动executor
可以通过参数"--total-executor-cores"来限制应用程序使用集群中最多的core。
Standalone-client提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--total-executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
Standalone集群中指定了程序最多使用2个core用于启动Executor,Spark会均衡的在每个Worker节点启动Executor,每个Executor使用1core和1G内存。

五、Standalone-cluster默认
Standalone-cluster模式中,Driver会在一台Worker节点启动,默认使用1Core和1G内存;集群中Worker剩余的core都会被用来启动Executor,每个Executor默认使用当前Worker节点所有core和1G内存。
Standalone-Cluster提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--deploy-mode cluster \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
提交任务后,可以通过WebUI查看当前Application使用资源情况,Driver在其中一台Worker节点启动,使用1core和1G内存。

Executor分别在Worker节点启动,使用当前Worker所有core和1G内存。

六、Standalone-cluster指定Driver使用2Core和2G内存
通过参数"driver-cores"指定Driver使用多少core;参数"driver-memory"指定Driver使用多少内存。
Standalone-Cluster提交Spark Pi命令如下:
bash
#在node4节点提交Spark Pi任务
[root@node4 bin]# ./spark-submit \
--master spark://node1:7077 \
--deploy-mode cluster \
--driver-cores 2 \
--driver-memory 2G \
--class org.apache.spark.examples.SparkPi \
../examples/jars/spark-examples_2.13-3.5.5.jar 100000
提交任务后,可以通过WebUI查看当前Application使用资源情况,Driver在其中一台Worker节点启动,使用2core和2G内存。

此时只剩余一个Worker用于启动Executor,Executor会使用当前Worker所有core和1G内存。

七、总结
通过以上 6 组测试,可以归纳出 Standalone 集群资源分配的几个关键规律:
- Driver 位置决定资源来源 :client 模式下 Driver 运行在提交任务的客户端,不占用集群资源;cluster 模式下 Driver 会占用一台 Worker 节点的 core 和内存,默认 1 core + 1G,可通过
--driver-cores和--driver-memory调整。 - Executor 默认吃满 Worker 资源:不指定参数时,每个 Executor 会使用所在 Worker 节点的全部 core 和 1G 内存,因此 Executor 数量等于 Worker 数量。
- core 与内存共同决定 Executor 数量 :指定
--executor-cores和--executor-memory后,Spark 会按 Worker 剩余资源切分 Executor。例如 1 core + 2G 时,每台 3G 内存的 Worker 只能启动 1 个 Executor,剩余 1 core 和 1G 内存被浪费。 - 总量限制优先于单 Executor 配置 :使用
--total-executor-cores可以限制应用使用的 core 总数,Spark 会尽量均衡地在各 Worker 上启动 Executor。 - 资源规划要兼顾均衡:core 与内存需按比例配置,避免出现 core 用满而内存不足、或内存充足而 core 闲置的情况。
实际生产中,建议结合集群总资源、任务并行度和数据规模,合理设置 --executor-cores、--executor-memory、--total-executor-cores 以及 cluster 模式下的 Driver 参数,从而在资源利用率和任务稳定性之间取得平衡。
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨