从"跑起来"到"控得住":补上生产环境最脆弱的一环
很多人学 Spark,代码在 IDEA 里能跑通就以为毕业了。一旦提交到生产集群,OOM、Executor 频繁挂掉、资源抢占不过来的问题就全来了。这门课解决的核心痛点正是这一环节:**你的 Spark 应用在生产环境为什么表现不稳定?如何正确控制 Driver 和 Executor 的资源与行为?**
它不教你写复杂的算子逻辑,而是聚焦于 `spark-submit` 这一条命令背后那些容易被忽视、却直接决定作业生死的关键参数细节。很多初学者只知道 `--master` 和 `--class`,却不知道 `--conf spark.executor.memory` 填多少才合适,也不明白 `--driver-memory` 和 `--conf spark.driver.memoryOverhead` 的区别。这些细节如果不清楚,排障时就只能靠猜,效率极低。
前置门槛与推荐学习路径
适合已经能写出基本 Spark 作业、且对 RDD 和 DataFrame 算子有一定概念的学习者。如果你连 `flatMap`、`reduceByKey` 这些基础 API 还不太熟练,建议先回头补 Core 基础内容,再来看这个"最后一公里"。
建议按以下顺序推进:
- **先理解 JVM 进程启动机制**:这一步不是为了成为 Java 高手,而是让你明白当 `spark-submit` 被执行时,底层是怎么拉起 Driver 进程、怎么管理内存区域的。知道"为什么",配置参数时才不会死记硬背。
- **建立 spark-submit 的全局认知**:先看一遍所有参数的概览,了解每个参数大致管哪一块,心里有地图再深入。
- **重点攻克 master 与 deploy-mode**:client 模式和 cluster 模式的选择不是随意的,它直接影响你本地能不能访问 Spark UI、日志在哪里、以及如何向 YARN 申请资源。这个知识点是所有后续配置的前提。
- **逐个击破 Driver 和 Executor 参数**:这是最核心的部分,需要结合练习反复验证,确保理解每一项配置对实际运行的影响。
学完能独立做什么
完成之后,你可以独立完成以下工作:
- **根据作业类型和数据规模,独立设计并提交一个生产级 Spark 作业**,包括合理配置 Driver 内存、Executor 数量、核心数、依赖加载方式等,而不是照搬别人的模板。
- **准确排查因提交参数不当导致的常见问题**,例如 OOM 是发生在 Driver 还是 Executor、Container 被 kill 是因为内存超限还是 CPU 超标、Spark UI 访问不到的原因是什么。
- **根据集群环境(YARN、Standalone 或 K8s)选择正确的 deploy-mode**,并理解不同模式对运维管理和性能监控的具体影响。
- **在团队中能够承担 Spark 作业上线前的资源评审工作**,对每一项资源配置都有据可依,而不是说"感觉够用了"。
资料包的配合方式是:在本地或测试集群上,手动修改各项关键参数,观察 Application Master 的启动过程、日志输出变化以及资源分配结果。对比不同参数组合下任务的运行表现,记录每次修改带来的差异,形成自己的参数配置经验表。
课程目录
1-1 [课程内容简介] 课程内容简介 (09:45) 2-1 [Java基础知识] java命令启动JVM (16:16) 2-2 [Java基础知识] java ProcessBuilder启动JVM (17:31) 3-1 [详解spark-submit每一个参数] spark-submit感官认识 (12:22) 3-2 [详解spark-submit每一个参数] master和deploy-mode参数详解 (17:25) 3-3 [详解spark-submit每一个参数] --conf参数详解 (07:28) 3-4 [详解spark-submit每一个参数] driver相关参数详解 (12:10) 3-5 [详解spark-submit每一个参数] executor相关参数详解 (14:58) 3-6 [详解spark-submit每一个参数] --jars参数详解 (12:20) 3-7 [详解spark-submit每一个参数] --packages相关参数详解 (07:15) 3-8 [详解spark-submit每一个参数] --files与properties-file相关参数详解 (08:24) 3-9 [详解spark-submit每一个参数] --queue相关参数详解 (07:43) 3-10 [详解spark-submit每一个参数] python spark应用的正确提交 (07:56) 3-11 [详解spark-submit每一个参数] 利用SparkLauncher在代码中提交spark应用 (10:19) 4-1 [spark-submit原理] spark脚本系统 (11:30) 4-2 [spark-submit原理] spark-class脚本原理以及实现 (13:09) 4-3 [spark-submit原理] spark-daemon脚本原理以及实现 (10:26) 4-4 [spark-submit原理] SparkSubmit原理以及源码分析 (20:27)
![[老汤]Spark 2.x 实战应用系列四之Spark-core正确提交spark应用](/_next/image?url=https%3A%2F%2Fwww.itzhibei.com%2Fapi%2Fuploads%2F7419b35c-b36c-43e6-aa13-fbc066e42415.jpg&w=1920&q=75)




