Spark 核心之 Client 模式提交命令和特点分析

简介: 本文深度解析 Spark Client 模式核心——`spark-submit` 命令,涵盖命令全景、Standalone/YARN-Client 对比、六大参数详解、四种实战场景、参数优先级机制,并配原创架构图与可运行示例,助你彻底掌握 Driver 位置、资源分配与配置逻辑。(239字)

摘要:spark-submit 是用 Spark 的第一道门槛。一条命令背后隐藏着 Driver 位置、资源分配策略、参数优先级、Standalone vs YARN 差异等大量关键决策。本文从 spark-submit 命令结构全景、Standalone-Client 与 YARN-Client 命令对比、六大核心参数详解、四种 Client 模式场景模板、参数优先级机制五个维度,配合 1 张原创深色架构图和完整可运行示例,让你彻底掌握 Spark Client 模式的提交命令。

关键词:spark-submit, Client 模式, Standalone-Client, YARN-Client, --master, --deploy-mode, 参数体系, Driver 配置


一、开篇:你会写 spark-submit 吗?

先看一道面试题:

下面两条命令分别启动了哪种部署模式?Driver 运行在哪里?区别是什么?

# 命令 A
spark-submit --master spark://master:7077 --deploy-mode client app.jar

# 命令 B
spark-submit --master yarn --deploy-mode client app.jar

如果你能准确回答——说明你对 Spark 部署模式的参数体系已经有了系统理解。如果你犹豫了——这篇文章将帮你彻底理清 Client 模式的所有提交命令和参数。


二、spark-submit 命令全景图

在这里插入图片描述

2.1 通用命令结构

spark-submit [通用选项] [应用选项] [配置选项] <app-jar | python-file | R-file> [app-args]

每个选项组的作用:

选项组 前缀 核心参数 示例
通用选项 --master --deploy-mode 集群地址、部署模式 --master yarn
应用选项 --class --name --jars 主类、应用名、依赖 --class com.example.Main
Driver 配置 --driver-* Driver 内存、核心数 --driver-memory 2G
Executor 配置 --executor-* --num-executors Executor 资源 --executor-memory 4G
动态配置 --conf k=v 任意 Spark 配置 --conf spark.sql.shuffle.partitions=200

2.2 --master 决定了资源管理器

# Standalone
--master spark://master:7077

# YARN
--master yarn

# YARN HA(多个 RM)
--master yarn --conf spark.yarn.ha.enabled=true

# 本地测试
--master local[4]

2.3 --deploy-mode client 决定 Driver 位置

Client 模式的核心语义:Driver 在提交客户端 JVM 中运行。

# 显式指定(推荐)
--deploy-mode client

# 省略时的默认值(取决于 --master)
# --master spark://...     → 默认 client
# --master yarn             → 默认 client
# --master local[...]       → 始终 client

三、Standalone-Client 提交命令

3.1 完整模板

spark-submit \
  --master spark://master-node:7077 \
  --deploy-mode client \
  --class com.example.SparkApp \
  --name "my-standalone-client-app" \
  --driver-memory 2G \
  --driver-cores 2 \
  --executor-memory 4G \
  --executor-cores 2 \
  --total-executor-cores 8 \
  --conf spark.driver.port=4040 \
  --conf spark.driver.host=192.168.1.100 \
  --conf spark.default.parallelism=16 \
  --conf spark.serializer=org.apache.spark.serializer.KryoSerializer \
  /path/to/my-app.jar \
  arg1 arg2

3.2 Standalone-Client 特有参数

参数 说明 默认值
--total-executor-cores 总核心数(Standalone 特有) 所有 Worker 可用核心
--executor-cores 每个 Executor 核心数 1
--driver-cores Driver 核心数(本地 JVM) 1

注意:Standalone 没有 --num-executors——Executor 数量由 --total-executor-cores / --executor-cores 自动计算。

3.3 spark-shell(交互式 Client)

# spark-shell 默认就是 Standalone-Client 模式
spark-shell \
  --master spark://master:7077 \
  --executor-memory 4G \
  --total-executor-cores 8
# 等价于 --deploy-mode client(默认值)

四、YARN-Client 提交命令

4.1 完整模板

spark-submit \
  --master yarn \
  --deploy-mode client \
  --class com.example.SparkApp \
  --name "my-yarn-client-app" \
  --driver-memory 2G \
  --executor-memory 4G \
  --executor-cores 2 \
  --num-executors 8 \
  --conf spark.yarn.am.memory=1G \
  --conf spark.yarn.am.cores=1 \
  --conf spark.yarn.queue=default \
  --conf spark.yarn.maxAppAttempts=2 \
  --conf spark.eventLog.enabled=true \
  --conf spark.eventLog.dir=hdfs:///spark-logs \
  /path/to/my-app.jar

4.2 YARN-Client 特有参数

参数 说明 默认值
--num-executors 固定 Executor 数量 2
spark.yarn.am.memory AM(ExecutorLauncher) 内存 1G
spark.yarn.am.cores AM 核心数 1
spark.yarn.queue YARN 队列 default
spark.yarn.maxAppAttempts AM 最大重试次数 2

4.3 spark-shell on YARN

spark-shell \
  --master yarn \
  --deploy-mode client \
  --executor-memory 4G \
  --num-executors 8

五、Standalone-Client vs YARN-Client 命令差异速记

# ======== Standalone-Client ========
spark-submit \
  --master spark://master:7077 \
  --deploy-mode client \
  --total-executor-cores 8 \          # ← 总核心数控制并行度
  --executor-memory 4G \
  app.jar

# ======== YARN-Client ========
spark-submit \
  --master yarn \
  --deploy-mode client \
  --num-executors 8 \                 # ← 固定 Executor 数量
  --executor-memory 4G \
  --conf spark.yarn.queue=default \   # ← YARN 专属
  app.jar
维度 Standalone-Client YARN-Client
资源指定 --total-executor-cores --num-executors
Master 地址 spark://host:7077 yarn
队列管理 无 spark.yarn.queue
AM 配置 无 spark.yarn.am.*
日志聚合 无 HDFS 事件日志

六、参数优先级机制

Spark 参数有三层来源,优先级从高到低:

优先级:--conf k=v  >  --<parameter>  >  spark-defaults.conf  >  代码中的 set()
       (命令行最高)  (专用选项)      (配置文件)           (代码最低)

相同参数冲突时,后指定的覆盖前指定的:

# --executor-memory 最终为 8G(后指定的生效)
spark-submit \
  --executor-memory 4G \
  --executor-memory 8G \
  app.jar

七、四种 Client 模式实战场景

场景 1:本地开发调试

spark-submit \
  --master local[4] \
  --driver-memory 2G \
  my-app.jar

场景 2:Standalone 集群交互分析

spark-shell \
  --master spark://master:7077 \
  --executor-memory 8G \
  --total-executor-cores 16

场景 3:YARN 集群生产级提交

spark-submit \
  --master yarn \
  --deploy-mode client \
  --driver-memory 4G \
  --executor-memory 8G \
  --executor-cores 4 \
  --num-executors 20 \
  --conf spark.yarn.queue=production \
  --conf spark.sql.shuffle.partitions=400 \
  etl-job.jar 2025-01-01

场景 4:Python PySpark on YARN

spark-submit \
  --master yarn \
  --deploy-mode client \
  --executor-memory 4G \
  --num-executors 8 \
  --conf spark.pyspark.python=/usr/bin/python3 \
  my-ml-pipeline.py --input hdfs:///data/raw

八、总结

要点 一句话总结
命令结构 spark-submit [通用] [应用] [配置] <jar>
--master 决定资源管理器:spark:// vs yarn vs local
--deploy-mode Client = Driver 在提交客户端
资源参数 Standalone 用 --total-executor-cores,YARN 用 --num-executors
优先级 --conf > --param > spark-defaults.conf > 代码

金句:掌握 spark-submit 命令不是目的——通过命令理解 Driver 在哪、资源如何分配、参数如何覆盖,才是工程师的竞争力所在。



作者:starzy | AI Data Engineer / 大数据技术实践者

博客:blog.starzy.cn | GitHub:starzy1990.github.io

专注 AI Agent · LangGraph · RAG · 大数据架构 · 数据工程实践

目录
相关文章
|
2天前
|
云安全 人工智能 运维
当攻击全面Agent化,你的安全防御能否跟上AI Speed?
多起客户侧AK泄露事件应急的真实观察
1199 1
|
25天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
9587 32
|
11天前
|
存储 人工智能 并行计算
大模型本地部署终端选型方法论:以 Qwen3.8-27B 为例的四档分层完整流程
本文提出一套大模型本地部署终端选型方法论:定约束、定档位、定框架、定参数四步决策法,配合入门、主力、质量、无损四档分层模型。以 Qwen3.8-27B 实测数据为例,逐环节解读显存、带宽、存储、散热、系统、预算等要素,给出面向不同预算的优选方案、决策自查清单与市场观察框架。文末前瞻 AI 笔记本的 CPU+GPU 与统一内存两条路线,论证四步决策法在新品类上的延续性。
|
10天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型深度拆解:原理解读、实战测评与保姆级落地教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为**System One Model(系统一模型)**,对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
787 1
|
6天前
|
人工智能 JSON 自然语言处理
2026 年 Jev 决策模型全解析:核心原理拆解,性能实战测评与落地部署教程
有一款特殊AI模型在开发者圈子刷屏,它摒弃传统大模型擅长的对话聊天能力,专注做高速结构化决策,它就是TypeSafe AI推出的Jev模型。该模型由ChatGPT共同发明人Diogo Almeida主导研发,定位为System One Model(系统一模型),对标人类大脑快速直觉判断的思维模式,在响应延迟、调用成本、结构化输出稳定性上相比传统生成式大模型有着巨大差异。本文会完整拆解Jev底层原理、三大核心原语能力、适用业务场景,同时提供可直接运行的curl、Python代码示例,并且结合多组实测数据,客观分析模型优势与能力边界,帮助普通开发者和AI应用从业者快速上手落地。
522 0
|
23天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2605 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
7天前
|
存储 人工智能 自然语言处理
千问办公官网入口链接在哪?2026年最新QwenWork测评、千问办公怎么样?一文看懂
千问办公(QwenWork)是阿里云推出的AI智能办公平台,提供网页端和阿里云官网双入口。支持PPT/Word/Excel生成、多模态处理、网页全栈搭建、钉钉深度集成等6大核心能力。个人版免费可用,高级版198元/月;企业版198元/人/月。新用户注册即赠2000积分。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
1013 0
|
17天前
|
Windows
【保姆级】.NET Framework 3.5离线安装教程(2026最新实测)
.NET Framework 3.5是微软经典运行库,专为兼容老软件、老游戏设计。Win7自带,Win10/11需手动启用(在线或离线安装)。它与4.x系列并存不冲突,缺它会导致“找不到组件”报错。本文详解两种安装方式及常见问题解决,小白也能轻松上手。(239字)
2205 0