Spark 任务调度之Submit Driver
2017-04-01 15:50
127 查看
概要
本篇博客是Spark 任务调度概述详细流程中的第一部分,介绍在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时,会借助于RestSubmissionClient或Client提交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的过程,完整流程如下相关文章推荐
- Spark的任务调度
- Spark入门——3:Spark的任务调度
- Spark Shuffle系列-----1. Spark Shuffle与任务调度之间的关系
- spark 核心作业调度和任务调度
- spark源码之Job执行(2)任务调度taskscheduler
- Spark1.3从创建到提交:3)任务调度初始化源码分析
- Spark核心作业调度和任务调度之DAGScheduler源码
- Spark 任务调度
- Spark调度机制:5)任务调度
- Spark任务调度
- spark调度系列------3. RDD依赖的建立以及RDD依赖在任务提交到调度系统的作用
- Spark 任务调度之创建Executor
- 深入Spark内核:任务调度(2)-DAGScheduler
- Spark 入门之四:Spark任务调度架构
- Spark技术内幕之任务调度:从SparkContext开始
- Spark的架构和任务调度
- 深入Spark内核:任务调度(1)-基本流程
- Spark Core 资源调度与任务调度(standalone client 流程描述)
- spark内核揭秘-spark任务调度系统
- Spark技术内幕之任务调度:从SparkContext开始