从"跑起来"到"控得住":补上生产环境最脆弱的一环

很多人学 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)