You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Standalone集群模式下如何通过spark-submit同时运行多作业?

Spark Standalone集群同时运行多应用问题解决

问题场景

通过以下步骤搭建Spark Standalone集群:

  • 启动Master:spark-class org.apache.spark.deploy.master.Master
  • 启动Worker:spark-class org.apache.spark.deploy.worker.Worker spark://IP:PORT

提交第一个应用可正常运行:

spark-submit \
    --class pack1.Maintest \
    --master spark://IP:PORT \
    --deploy-mode cluster \
    Program_1.jar

但提交第二个应用时,即使额外启动Worker,应用仍处于等待状态:

spark-submit \
    --class pack0.test2 \
    --master spark://IP:PORT \
    --deploy-mode cluster \
    Program_2.jar

尝试过--detach参数及类YARN提交命令,均未解决,需实现集群模式下同时运行2-3个应用。


排查与解决步骤

1. 检查集群资源占用

通过Master Web UI(默认http://<Master_IP>:8080)查看:

  • 各Worker的可用CPU核心、内存总量
  • 已运行应用的资源占用情况

若第一个应用耗尽集群全部资源,新增Worker后需确认其资源是否被Master识别,同时检查第二个应用的资源请求是否在剩余资源范围内。

2. 限制单应用资源请求

提交应用时显式指定资源参数,避免单个应用占用全部集群资源,示例:

spark-submit \
    --class pack0.test2 \
    --master spark://IP:PORT \
    --deploy-mode cluster \
    --executor-cores 2 \  # 每个Executor占用2核
    --executor-memory 2g \ # 每个Executor占用2G内存
    --total-executor-cores 4 \ # 该应用最多占用4核
    Program_2.jar

根据集群总资源调整参数,比如2个Worker各4核8G内存时,可给每个应用分配4核6G资源,实现同时运行2个应用。

3. 切换为FAIR调度模式

Spark Standalone默认使用FIFO调度器,会优先让第一个应用占用所有资源,后续应用排队。切换为FAIR调度器可实现多应用公平分配资源:

  1. 在Master节点的spark/conf目录下创建(或修改)spark-defaults.conf,添加:
spark.scheduler.mode FAIR
  1. 重启Spark Master及所有Worker节点
  2. (可选)自定义资源分配规则:在spark/conf下创建fairscheduler.xml,示例:
<?xml version="1.0"?>
<allocations>
    <pool name="default">
        <schedulingMode>FAIR</schedulingMode>
        <weight>1</weight>
        <minShare>2</minShare>
    </pool>
    <pool name="app-group-1">
        <schedulingMode>FAIR</schedulingMode>
        <weight>2</weight>
        <minShare>3</minShare>
    </pool>
</allocations>

提交应用时指定资源池:

spark-submit \
    --class pack1.Maintest \
    --master spark://IP:PORT \
    --deploy-mode cluster \
    --conf spark.scheduler.pool=app-group-1 \
    Program_1.jar

4. 验证Worker节点状态

确认新增Worker已成功连接到Master,在Web UI的Workers列表中状态为ALIVE。若未连接,检查网络连通性及Worker启动命令中的Master地址是否正确。

5. 查看日志定位问题

查看Master节点spark/logs目录下的日志,或通过Web UI进入等待应用的详情页,排查是否存在资源不足、节点通信失败等具体报错信息。


内容的提问来源于stack exchange,提问作者zainab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:43:36