本篇博客是Spark 任务调度概述详细流程中的第四部分,介绍Master Launch Executor的过程。
上图在Spark 任务调度之Submit Driver中介绍过,如上图最后一处注释,我们介绍了schedule()方法中launchDriver的流程,即Spark 任务调度之Launch Driver,这篇继续介绍schedule()方法另一个部分,Launch Executor,schedule()方法如下 上图中大部分代码是launchDriver,已经介绍了,如上图最后一行注释处,查看startExecutorsOnWorkers方法 如上图注释,waitingApps信息主要是我们通过命令行传入的core和memory信息,startExecutorsOnWorkers方法的职责是调度waitingApps,即将core和memory分配到具体的Worker,Spark 任务调度之Register App介绍了Driver注册app的流程。 scheduleExecutorsOnWorkers方法中,可以使用spreadOutApps算法分配资源,即Executor分布在尽可能多的Worker节点上,相反,也支持Executor聚集在某些Worker节点上,通过参数spark.deploy.spreadOut配置,默认为true,如下
startExecutorsOnWorkers方法中,最后调用allocateWorkerResourceToExecutors方法,如下 上图最后处调用launchExecutor方法,如下 如上图注释,给Worker节点发送LaunchExecutor消息,Worker节点收到消息,Launch Executor部分就结束了,下一部分具体讲Executor在Worker节点的启动,最后,Worker接收LaunchExecutor消息对应代码如下
介绍Master节点Launch Executor的过程,分两步
schedule waitingAppslaunch Executor流程如下