调度流程图
调度步骤
-
Spark Driver启动后,创建DAGScheduler、TaskScheduler和SchedulerBackend。
-
SchedulerBackend向Yarn Resource Manager(RM)注册,并开始接收来自Executor的心跳消息。
-
DAGScheduler将DAG图转换成一系列Stage(根据宽依赖关系拆分)。
-
DAGScheduler向TaskScheduler提交Stage。
-
TaskScheduler将Stage分成TaskSet,将TaskSet转化成TaskDescription,并将TaskDescription封装在Container Request中发送给Yarn RM。
-
Yarn RM分配Node Manager(NM)并将Container Request发送给对应的NM。
-
NM接收到Container Request后,启动Executor容器,并将TaskDescription发送给TaskScheduler。
-
TaskScheduler向SchedulerBackend发送Task Assigned消息,告知哪个Executor负责执行Task。
-
SchedulerBackend向相应Executor发送Task Launch消息,告知该Executor启动Task。
-
Executor启动后,根据Task的要求,执行具体的计算任务。
-
ExecutorBackend将Task的计算结果封装成TaskResult,发送给SchedulerBackend。
-
SchedulerBackend将TaskResult发送给TaskScheduler。
-
TaskScheduler将TaskResult发送给DAGScheduler。
-
DAGScheduler根据TaskResult更新DAG图的状态。
-
重复步骤3-14,直到DAG图的所有Task都被执行完成。
Spark编译打包一次的时间太久了