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

Spark纯集群中如何限制spark-submit的驱动与执行器资源参数?

限制Spark用户提交时修改资源参数的方案

方法1:修改Spark提交脚本,拦截违规参数

直接修改集群节点上的spark-submit脚本,在参数处理阶段过滤掉用户传入的--driver-memory、--executor-cores、--executor-memory这几个参数,强制使用spark-default.conf中的默认配置。

示例bash脚本修改逻辑:

# 过滤用户传入的禁止参数
filtered_args=()
skip_next=0
for arg in "$@"; do
    if [ $skip_next -eq 1 ]; then
        skip_next=0
        continue
    fi
    case "$arg" in
        --driver-memory|--executor-cores|--executor-memory)
            skip_next=1
            ;;
        *)
            filtered_args+=("$arg")
            ;;
    esac
done

# 用过滤后的参数执行原Spark提交逻辑
exec "${SPARK_HOME}/bin/spark-class" org.apache.spark.deploy.SparkSubmit "${filtered_args[@]}"

方法2:借助集群资源管理的队列/池限制

若集群基于YARN运行

在YARN容量调度器配置文件capacity-scheduler.xml中,为用户队列设置资源上限:

  • yarn.scheduler.capacity.root.default.maximum-allocation-mb:单个容器最大内存
  • yarn.scheduler.capacity.root.default.maximum-allocation-vcores:单个容器最大核数
    即使用户提交时设置了更大的参数,YARN会强制按队列限制分配资源,超出部分直接拒绝。

若为Spark Standalone模式

通过spark-default.conf配置spark.cores.max设置全局资源上限,同时在Standalone UI中创建资源池,为每个池分配固定的核数、内存配额,用户提交的任务会被限制在所属池的资源范围内。

方法3:Spark 3.0+版本用配置锁定参数

Spark 3.0及以上支持通过配置限制参数修改,可设置全局禁止普通用户修改配置,仅开放给指定管理员:
在spark-default.conf中添加:

spark.conf.allowModifications false
spark.admin.acls admin_user1,admin_user2

普通用户提交任务时无法修改任何配置参数,只能使用集群默认值。

方法4:封装自定义提交入口

编写自定义提交脚本,只允许用户传入业务相关参数(如--class、--jar、--name等),自动屏蔽资源配置参数,并强制附加默认资源配置。

示例自定义脚本custom-spark-submit.sh:

#!/bin/bash
allowed_params=("--class" "--jar" "--master" "--name" "--conf")
filtered_args=()
skip_next=0

for arg in "$@"; do
    if [ $skip_next -eq 1 ]; then
        filtered_args+=("$arg")
        skip_next=0
        continue
    fi
    for allowed in "${allowed_params[@]}"; do
        if [ "$arg" == "$allowed" ]; then
            filtered_args+=("$arg")
            skip_next=1
            break
        fi
    done
done

# 强制附加默认资源配置
filtered_args+=("--conf" "spark.driver.memory=2g")
filtered_args+=("--conf" "spark.executor.cores=1")
filtered_args+=("--conf" "spark.executor.memory=2g")

# 调用原spark-submit
exec "${SPARK_HOME}/bin/spark-submit" "${filtered_args[@]}"

要求用户通过该脚本提交任务,而非直接使用原生spark-submit。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:55:30