Spark 源码学习 - Application 提交过程

目录

 Application 提交过程,按照如下步骤分析:

  1. submit Driver     Spark 源码学习 - 应用提交-1 Submit Driver
  2. launch Driver     Spark 源码学习 - 应用提交-2 Launch Driver
  3. registerApplication
  4. launch Executor 
  5. start CoarseGrainedExecutorBackend 
  6. create Executor && register Executor 
  7. Driver send Task 
  8. Executor sendback Result 

概要

主要介绍Standalone部署模式下,从命令行执行spark-submit命令提交任务开始,到最后计算结果返回driver的完整过程,主要涉及到spark-core中deploy、executor和scheduler部分,但DAGScheduler相关的部分涉及到内容较多,留作后面详细分析。

Spark Doc中的介绍

Spark官方文档中,Cluster Mode Overview部分对执行的流程做了简要的介绍,如下 
Spark 源码学习 - Application 提交过程
上图涉及到的概念spark文档中给出了解释,后续的分析会从代码层面有更直观的介绍,从上图能够得出Spark执行的大致过程,如下

  1. Driver程序(即用户编写的Spark程序)初始化SparkContext对象。
  2. SparkContext对象初始化过程中,连接集群资源管理器Cluster Manager,申请资源,注册APP信息。
  3. CM根据Driver申请的资源,在Worker上创建Executor。
  4. 创建好的Executor将其自身信息发送给Driver。
  5. Driver将用户编写的代码转为Task,发送给相应到Executor,进行计算。
  6. Executor计算结果返回给Driver,最后Executor的关闭及APP信息的修改等。

下图描述了Driver提交task的流程,详细流程中的Spark 任务调度之Driver send Task 会大致介绍这部分,后续会详解DAGScheduler的作用。 
Spark 源码学习 - Application 提交过程

结合上面两幅图,对任务的提交和调度有了初步的认识。

详细流程

以上面两幅图为基础,接下来结合源码详细介绍Standalone部署模式下,deploy-mode为cluster的任务调度流程,完整流程如下,将整个流程大致分为了八部分,如下图中小标,并对每个部分详细介绍 
Spark 源码学习 - Application 提交过程