Spark 源码学习 - 应用提交-1 Submit Driver

概要

本篇博客是Application 应用提交详细流程中的第一部分,介绍在Standalone模式下,从命令行使用spark-submit提交任务开始,到将Driver提交到Master的过程。

详细流程

spark-submit提交任务

下面是Spark doc中的一个命令行提交的例子,也是我们分析任务调度的起点 
 
注意,上图中的deploy-mode为cluster,查看spark-submit脚本内容 
这里写图片描述

spark-submit中调用shell spark-class,spark-class中对Java环境变量等做了校验,最后一行处,调用exec执行命令,如下 
 
下图是exec执行的具体命令,图中红色竖线内的部分是SPARK_ASSEMBLY_JAR,这段命令使用java -cp运行SparkSubmit中main方法,后面的参数就是命令行传入的参数,SparkSubmit类所属的jar包就在SPARK_ASSEMBLY_JAR中 

org.apache.spark.deploy.SparkSubmit

shell中调用了SparkSubmit的main函数,main函数主要逻辑在处理传入的配置信息并设置为环境变量(Driver、RestSubmissionClient或Client通过环境变量读取此配置)、使用类加载器加载配置的jar等,当deploy-mode为cluster时,会借助于RestSubmissionClientClient提交Driver,如下 

然后使用反射,启动childMainClass,如下(三段单独代码) 
 
 
 
deploy-mode为client时,上面的childMainClass为用户自己编写的Main函数,即Driver启动在执行spark-submit命令的节点。最后SparkSubmit中主要逻辑如下 

org.apache.spark.deploy.Client

如SparkSubmit中最后的流程图所示,我们选择其中的Client这条执行路径,SparkSubmit使用反射运行Client的main方法,Client的main方法先处理传入的参数(和SparkSubmit中处理参数相似),然后创建RpcEnv对象,如下 

如上图注释所示,ClientEndpoint的onStart发送消息给Master,注册Driver,如下 
 
接下来看下Driver信息的格式,如下 
 
上图中信息除了command外均容易理解,查看Command的内容 
 
如上图注释,Spark使用DriverWrapper启动用户APP的main函数,而不是直接启动,这是为了Driver程序和启动Driver的Worker程序共命运(源码注释中称为share fate),即如果此Worker挂了,对应的Driver也会停止。至此,Client提交Driver流程结束了。

Master处理RequestSubmitDriver消息

Master的receiveAndReply方法接收Client发送的消息RequestSubmitDriver,将收到的Driver注册到waitingDrivers,如下 

总结

介绍了deploy-mode=cluster模式下,从命令行提交任务,到Master端接收并注册Driver的过程,完整流程如下 

附上原文地址:

Mr_JieLQ    https://blog.csdn.net/u011564172/article/details/65653617

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值