Spark提交流程源码领读

Spark提交流程源码领读在这里插入图片描述

从上图一步步来解析

  1. 通过SparkSubmit的脚本使用submit触发 doSubmit(arg[])

  2. 然后自己调用submit(args: SparkSubmitArguments, uninitLog: Boolean),

  3. prepareSubmitEnvironment 它主要是使用从前两步解析的参数,选择对应的启动类,启动类不一定是我们写的主类。准备一些后面需要用到参数childArgschildClasspathsparkConf
    比如yarn模式下是这个类org.apache.spark.deploy.yarn.YarnClusterApplication
    在这里插入图片描述

  4. 自己调用runMain(childArgs: Seq[String],childClasspath: Seq[String],sparkConf: SparkConf,childMainClass: String,
    verbose: Boolean)
    ,判断一下需要启动的类是不是SparkApplication的子类,如果不是使用JavaMainApplication包装一下,然后启动
    在这里插入图片描述

  5. 然后会走到YarnClusterApplicationstart方法中

  6. 接下来触发Client的提交应用的方法submitApplication,这里就是做关于申请资源,创建container,上下文等工作然后最终提交应用。

submitApplication方法的具体内容
  • createApplication 其实主要是去获得一个AppId然后包装为ApplicationSubmissionContext。它包含了启动AppMaster所需要的所有东西,RM会返回一个GetNewApplicationResponse,它包含了计算资源。比如,内存,cpu core等
    在这里插入图片描述
    在这里插入图片描述

    详见这个类了解获取appId:GetNewApplicationRequest
    在这里插入图片描述

  • verifyClusterResources 验证资源是否足够,这里主要就是验证了一下内存,并没有详细的验证

在这里插入图片描述

  • createContainerLaunchContext 根据GetNewApplicationResponse创建container,它包含启动AppMaster的命令和一些资源,还有安全验证的Token等
    在这里插入图片描述

  • createApplicationSubmissionContext 使用Container创建一个应用上下文,主要是启动AppMaster的资源,应用的名字或者类型等一些公共参数

  • yarnClient.submitApplication(appContext)
    通过包装请求SubmitApplicationRequest放松个RM,启动AppMaster

    在这里插入图片描述
    大概是入了个门吧,AppMaster是怎么启动driver,excutor后面再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值