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
相关产品推荐
相关产品推荐

