SparkSubmit是整个程序运行的入口,以yarn cluster模式为例,简要分析了SparkSubmit的执行过程,剖析一个任务是如何提交到yarn的。
doSubmit(提交)
1 | def doSubmit(args: Array[String]): Unit = { |
parseArguments(参数解析)
1 | // 参数解析由 SparkSubmitArguments 完成。 |
SparkSubmitArguments 核心代码
1 | private[deploy] class SparkSubmitArguments(args: Seq[String], env: Map[String, String] = sys.env) |
runMain
使用提交参数的参数运行子类的main方法。主要
模式 | childMainClass |
---|---|
client | –class 指定的主类 |
standalone | rest模式下使用RestSubmissionClientApp;非rest模式下ClientApp |
yarn-cluster | YarnClusterApplication |
mesos | 仅支持rest模式:RestSubmissionClientApp |
kubernetes | KubernetesClientApplication |
1 | private def runMain(args: SparkSubmitArguments, uninitLog: Boolean): Unit = { |
由此可见,不同的提交模式,对应不同的SparkApplication的实现。下面看下YarnClusterApplication的实现。
YarnClusterApplication
1 | private[spark] class YarnClusterApplication extends SparkApplication { |
总结
一个spark任务的提交,以yarn cluster为例,整体流程如下:
1 | doSubmit(开始提交) |
任务提交到yarn之后,如何拉起driver container,executor等等,都是在Client中实现的,后面专门分析下具体实现。
如何拉起driver
本文作者:
Jeff.R
本文链接: https://stefanxiepj.github.io/archives/ca10b141.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://stefanxiepj.github.io/archives/ca10b141.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)