我这里使用spark2.4.4版本;
1.入口脚本与入口类
进入org.apache.spark.deploy.SparkSubmit类的main方法
override def main(args: Array[String]): Unit = {//省略部分代码//提交submit.doSubmit(args)}
下一步
def doSubmit(args: Array[String]): Unit = {//解析验证提及配置参数val appArgs = parseArguments(args)appArgs.action match {//提交case SparkSubmitAction.SUBMIT => submit(appArgs, uninitLog)//杀掉case SparkSubmitAction.KILL => kill(appArgs)case SparkSubmitAction.REQUEST_STATUS => requestStatus(appArgs)case SparkSubmitAction.PRINT_VERSION => printVersion()}}
下一步
private def submit(args: SparkSubmitArguments, uninitLog: Boolean): Unit = {def doRunMain(): Unit = {if (args.proxyUser != null) {val proxyUser = UserGroupInformation.createProxyUser(args.proxyUser,UserGroupInformation.getCurrentUser())try {proxyUser.doAs(new PrivilegedExceptionAction[Unit]() {override def run(): Unit = {runMain(args, uninitLog)}})} catch {case e: Exception =>//省略代码}} else {//一般在不设置proxyUser时,都走的这个分支runMain(args, uninitLog)}}if (args.isStandaloneCluster && args.useRest) {//省略代码} else {//非Standalone模式走这个分支doRunMain()}}