Spark-yarn 客户端模式下的 ApplicationMaster 如何工作?

How ApplicationMaster in Client mode in Spark-yarn works?

我对 spark 很陌生。目前我正在查看 Spark 代码以更好地理解它是如何工作的。

据我了解,在 Spark Client 模式下,org.apache.spark.deploy.SparkSubmit class 在此代码中启动由 org.apache.spark.deploy.JavaMainApplication 包装的用户 class(如果我的 class 不扩展 SparkApplication)

val app: SparkApplication = if (classOf[SparkApplication].isAssignableFrom(mainClass)) {
  mainClass.getConstructor().newInstance().asInstanceOf[SparkApplication]
} else {
  new JavaMainApplication(mainClass) //Here my class will be ran by this
}
...
app.start(childArgs.toArray, sparkConf)

但是用户应用程序没有任何启动 ApplicationMaster 逻辑。如果我的 class 没有实现 org.apache.spark.deploy.SparkApplication.

,我不明白 ApplicationMaster 如何在客户端模式下运行

我发现的一件事是 spark yarn 包中有 org.apache.spark.deploy.yarn.ExecutorLauncher,但我不知道如果用户不扩展 SparkApplication 是怎么回事 运行。

我设法弄清楚它是如何工作的。 TaskScheduler初始化时在SparkContext中初始化