2、Driver启动后向Master注册应用程序,Master根据submit脚本的资源需求找到内部资源至少可以启动一个Executor的所有Worker,然后在这些Worker之间分配Executor;
3、Worker上的Executor启动后会向Driver反向注册;
4、当所有的Executor注册完成后,Driver开始执行main函数;
5、之后执行到Action算子时,开始划分stage;
6、每个stage生成对应的taskSet,之后将task 分发到各个Executor上执行。
Standalone Cluster模式
1、在Standalone Cluster模式下,任务提交后,Master会找到一个Worker启动Driver进程;
2、Driver启动后向 Master注册应用程序;
3、Master根据submit脚本的资源需求找到内部资源至少可以启动一个Executor的所有 Worker,然后在这些Worker之间分配Executor;
4、Worker上的Executor启动后会向Driver反向注册;
5、所有的 Executor注册完成后,Driver开始执行main函数;
6、之后执行到Action算子时,开始划分stage,每个stage生成对应的taskSet;
7、之后将task分发到各个Executor上执行。
注意,Standalone的两种模式下(client/Cluster),Master在接到Driver注册Spark应用程序的请求后,会获取其所管理的剩余资源能够启动一个 Executor的所有Worker,然后在这些Worker之间分发Executor,此时的分发只考虑Worker上的资源是否足够使用,直到当前应用程序所需的所有Executor都分配完毕,Executor反向注册完毕后,Driver开始执行main程序。
YARN模式运行机制
YARN Client模式
1、在YARN Client模式下,Driver在任务提交的本地机器上运行;
2、Driver启动后会和ResourceManager通讯申请启动ApplicationMaster;
3、随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster的功能相当于一个ExecutorLaucher(执行者发射器),只负责向ResourceManager申请Executor内存;
4、ResourceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程;
5、Executor进程启动后会向Driver反向注册;
6、Executor全部注册完成后Driver开始执行main函数;
7、之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage;
8、每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。
YARN Cluster模式
1、在YARN Cluster模式下,任务提交后会和ResourceManager通讯申请启动ApplicationMaster;
2、随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster;(此时的ApplicationMaster就是Driver)
3、Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程;
4、Executor进程启动后会向Driver反向注册;
5、Executor全部注册完成后Driver开始执行main函数;
6、之后执行到Action算子时,触发一个job,并根据宽依赖开始划分stage;
7、每个stage生成对应的taskSet,之后将task分发到各个Executor上执行。
三、Spark通讯架构Spark通信架构概述
Spark2.x版本使用Netty通讯架构作为内部通讯组件。Spark基于Netty新的rpc框架借鉴了Akka中的设计,它是基于Actor模型,如下图所示:
Spark通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系如下:
Endpoint(Client/Master/Worker)有一个InBox和N个OutBox(N>=1,N取决于当前Endpoint与多少其他的Endpoint进行通信,一个与其通讯的其他Endpoint对应一个OutBox),Endpoint接收到的消息被写入InBox,发送出去的消息写入OutBox并被发送到其他Endpoint的InBox中。
Spark通讯架构解析
Spark通信架构如下图所示: