前言
在第二篇文章 Spark 源码 | SparkSubmit 提交流程分析(二) 中,我们分析了 SparkSubmit 的提交流程。在 Yarn Client 模式下:
runMain方法会调用app.start(Yarn Client 模式下为 JavaMainApplication),在 app.start 中通过反射调用用户主类的 main 方法(具体调用过程在不同模式中有所不同,后续分析各模式时再详细说明)- 用户主类(如 SparkPi)的 main 方法通常会创建 SparkSession 或 SparkContext
- 在创建 SparkContext 时,会创建 TaskScheduler 和 SchedulerBackend
本文说明:虽然本文以 Yarn Client 模式为例(YarnScheduler、YarnClientSchedulerBackend),但 SparkContext 初始化和 TaskScheduler 创建流程是各模式的公共前提。后续分析 Yarn Cluster、Standalone 等模式时可直接参考本篇内容。
为什么要先写这篇:TaskScheduler 和 SchedulerBackend 的创建是各模式的公共前提,内容较多。如果不先单独分析,在分析各模式提交流程时就需要同时包含这些内容,导致每篇文章都很长。因此本文先专门分析它们的创建过程,后续分析各模式时就可以直接聚焦于该模式特有的流程(如 Executor 启动)。
版本
Spark 3.2.3
SparkContext 初始化入口
用户代码通常这样创建 SparkContext:
1 | val spark = SparkSession.builder() |