发布网友 发布时间:17小时前
共1个回答
热心网友 时间:15小时前
摘要:本文主要通过Spark代码走读来解析spark-submit的执行流程。
在进行Spark任务提交时,会使用“spark-submit -class .....”命令,这是Spark目录下的shell脚本,其作用在于查询spark-home并调用spark-class命令。随后,spark-class执行时会以SparkSubmit类为参数进行任务向Spark程序的提交。shell脚本执行的步骤包括:加载spark环境参数、载入java、jar包等、调用org.apache.spark.launcher中的Main进行参数注入、监测任务执行状态。
在任务提交后,shell脚本会构建cmd执行任务。检测执行模式(class或submit),在submit模式中进行参数检查(SparkSubmitOptionParser),构建命令行并打印至spark-class中,最后调用exec执行spark命令行提交任务。组装而成的cmd内容包含了任务执行的参数和逻辑。
Spark任务提交后,会在SparkSubmit中的main方法中执行。doSubmit()方法对log进行初始化,添加spark任务参数,通过参数类型执行任务,包括SUBMIT、KILL(仅限于Standalone和Mesos集群模式)、REQUEST_STATUS(仅限于Standalone和Mesos集群模式)、PRINT_VERSION等操作。调用submit函数,doRunMain为集群调用子main class准备参数,之后调用runMain()执行任务。
Spark在作业提交时会根据不同的参数和模式采用不同的执行分支。最后,在runMain中将所需参数传递给执行函数,完成任务执行。
本文分享自华为云社区《Spark内核解析之Spark-submit》,由笨熊爱喝cola撰写。