概要
本篇博客是Spark 任务调度概述详细流程中的第三部分,上一篇Spark 任务调度之Launch Driver最后讲到了Worker进程使用java.lang.ProcessBuilder执行java -cp命令启动用户编写的程序。执行用户程序的main方法,初始化SparkContext,SparkContext初始化过程中其中主要涉及到三个对象,AppClient、SparkDeploySchedulerBackend和TaskScheduler,这三个对象完成了本篇的Register APP过程,以及后续讲到的和Executor的交互,主要为提交task和接收Executor返回的计算结果。
SchedulerBackend
SparkDeploySchedulerBackend是SchedulerBackend的实现类,作用于Driver内,维护了和Executor的通信,配合TaskScheduler提交任务到Executor,以及接收Executor的计算结果。SchedulerBackend有几个实现类,分别针对不同的资源管理器,如下
上图中各组件作用如下
- ExecutorAllocationClient: 负责向资源管理器申请Executor。
- DriverEndpoint: 底层提交task到Executor,接收Executor返回的计算结果。
- CoarseGrainedSchedulerBackend: 粗粒度的SchedulerBackend实现,使用集合executorDataMap维护和Executor通信的RpcEndpointRef,主要实现有SparkDeploySchedulerBackend、YarnSchedulerBackend、SimrSchedulerBackend。
- SparkDeploySchedulerBackend: 用于和Standalone资源管理器及Executor通信,其他实现YarnSchedulerBackend、MesosSchedulerBackend等分别对应Yarn和Mesos。
TaskScheduler
TaskScheduler的主要作用是,将DAGScheduler生成的task,使用SchedulerBackend和DriverEndpoint发送给Executor,跟这篇文章相关的是,Register App的行为始于其实现类TaskSchedulerImpl的start方法,UML如下
Register App
什么是Register App
打开Standalone模式下的管理页面,会看到如下信息
上图中Running Applications和Completed Applications分别是正在运行的程序和已完成程序,所以,Register App流程是指,Driver运行时,将上图所示的信息注册到Master的过程。
流程
Spark 任务调度之Launch Driver最后讲到了使用java -cp命令启动用户编写的程序,我们使用的例子是SparkPi,如下
Register App行为始于上图中的SparkContext初始化,可以参考SparkContext初始化过程,在其初始化时,会创建SparkDeploySchedulerBackend和TaskScheduler对象,并调用TaskScheduler的start方法正式开始Register App的流程,如下
接下来调用SparkDeploySchedulerBackend的start方法,其start方法调用父类CoarseGrainedSchedulerBackend的start方法,父类的start方法中注册DriverEndpoint到RpcEnv,DriverEndpoint用于提交task到Executor,接收Executor返回的计算结果。
此外,SparkDeploySchedulerBackend的start方法会初始化AppClient,并执行其start方法,start方法中注册ClientEndpoint,ClientEndpoint的生命周期方法onStart中会和Master通信,注册APP,如下图注释
看下Master端对APP的注册
最后,完整流程如下
主要步骤如下
- 如上图①,Driver端注册DriverEndpoint到RpcEnv的流程,之后DriverEndpoint用于和Executor通信,包括send task和接收返回的计算结果。
- 如上图②,Driver向Master注册APP的流程。
总结
接着Spark 任务调度之Launch Driver,继续介绍Driver启动过程中,当SparkContext初始化时,Driver端注册DriverEndpoint到RpcEnv及Driver向Master注册APP信息的流程。