Spark内核解析 (2)

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模式

img

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模式

img

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模式

img

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模型,如下图所示:

img

Spark通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系如下:

img

Endpoint(Client/Master/Worker)有一个InBox和N个OutBox(N>=1,N取决于当前Endpoint与多少其他的Endpoint进行通信,一个与其通讯的其他Endpoint对应一个OutBox),Endpoint接收到的消息被写入InBox,发送出去的消息写入OutBox并被发送到其他Endpoint的InBox中。

Spark通讯架构解析

Spark通信架构如下图所示:

img

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxwxz.html