Spark-submit 执行流程,了解一下
摘要:本文主要是通过Spark代码走读来了解spark-submit的流程。
1.任务命令提交
我们在进行Spark任务提交时,会使用“spark-submit -class .....”样式的命令来提交任务,该命令为Spark目录下的shell脚本。它的作用是查询spark-home,调用spark-class命令。
随后会执行spark-class命令,以SparkSubmit类为参数进行任务向Spark程序的提交,而Spark-class的shell脚本主要是执行以下几个步骤:
(1)加载spark环境参数,从conf中获取
(2)载入java,jar包等
(3)调用org.apache.spark.launcher中的Main进行参数注入
(4)shell脚本监测任务执行状态,是否完成或者退出任务,通过执行返回值,判断是否结束
2.任务检测及提交任务到Spark
检测执行模式(class or submit)构建cmd,在submit中进行参数的检查(SparkSubmitOptionParser),构建命令行并且打印回spark-class中,最后调用exec执行spark命令行提交任务。通过组装而成cmd内容如下所示:
3.SparkSubmit函数的执行
(1)Spark任务在提交之后会执行SparkSubmit中的main方法
(2)doSubmit()对log进行初始化,添加spark任务参数,通过参数类型执行任务:
SUBMIT:使用提供的参数提交application
KILL(Standalone and Mesos cluster mode only):通过REST协议终止任务
REQUEST_STATUS(Standalone and Mesos cluster mode only):通过REST协议请求已经提交任务的状态
PRINT_VERSION:对log输出版本信息
(3)调用submit函数:
doRunMain为集群调用子main class准备参数,然后调用runMain()执行任务invoke main
4.总结
Spark在作业提交中会采用多种不同的参数及模式,都会根据不同的参数选择不同的分支执行,因此在最后提交的runMain中会将所需要的参数传递给执行函数。
本文分享自华为云社区《Spark内核解析之Spark-submit》,原文作者:笨熊爱喝cola。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/928759d18e12eaaa90815b936】。文章转载请联系作者。
评论