Spark 的运行流程原理

来源:互联网 发布:淘宝包裹放微信二维码 编辑:程序博客网 时间:2024/05/17 23:25

## Spark Worker工作机制 ##

[睡着的水-hzjs.2016.08.22]

一、worker 进程的启动

1、Driver 与Executor 的启动过程



二、Worker 启动Driver

1、Cluster 中的Driver 失败的时候,如果supervise为true ,则启动该Driver 的Worker 会负责重新启动该Driver;

2、DriverRunner 启动进程是通过ProcessBuilder 中的 Process.get.waitFor 来完成的。


三、Spark Executor 工作原理

1、需要特别注意的是CoaseGraninedExecutorBackend 启动时向Driver注册Executor 其实质是注册ExecutorBackend 实例,和Executor 实例之间诶有直接的关系!

2、CoaseGrainedExecutorBackend 是 Executor 运行所在的进程的名称,Excutor 才是正在处理task 的对象,Executor 内部是通过线程池的方式来完成Task的计算的;

3、CoaseGrainedExecutorBackend 与 Executor是一一对应的;

4、CoaseGrainedExecutorBackend 是一个消息通信体(其具体实现了TreadSafeRPCEndpoint),可以发送信息给Driver,并可以接受Driver 中发过来的指令,例如启动Task.

5、在DriverEndpoint 的进程中有两个至关重要的Endpoint:

a、ClientEndpoint 主要负责向Master 注册当前的程序,是AppClient 的内部成员;

b、DriverEenPoint 这是整个程序运行时候的驱动器,是CoaseGranedExecutorBackend 的内部成员;

6、在Driver 中通过ExecutorData 封装并注册ExecutorBackend 的信息到Driver 的内存数据结构executorMapData中:

7、实际在执行的时候DriverEndpoint 会把信息写入CoaseGrainedSchedulerBackend 的内存数据结构executorMapData,所以说最终是注册给了CoaseGrainedSchedulerBackend,也就是说CoaseGrainedSchedulerBackend掌握了为前程序分配所有的ExecutorBackend 进程,而在每一个Executorbackend 进行实例中会通过Executor对象具体负责Task 的运行,在运行的时候使用Synchronized关键字来保证executorMapData安全的并发写操作。


context.reply(RegisteredExecutor(executorAddress.host)) 是向CoaseGrainedExecutorBackend 发送消息,接收消息如下:

8、CoaseGrainedExecutorBackend 收到DriverEndpoint 发送过来的RegisteredExecutor 消息后会启动Executor 实例对象,而Executor 实例对象负责真正的Task 计算的;

三、Executor 具体是如何工作的?

1、当Driver发过来Task 的时候,其实是发送给了CoarseGrainedExecutorBackend 这个RpcEndpoint,而不是直接发送了给了Executor (Executor 由于不是消息循环体,所以永远不能也无法直接接受远程过来的信息):


2、ExecutorBackend 在收到Driver 中发过来的消息后会提供调用launchTask 来交给Executor 去执行;


[求点赞~~~]




1 0
原创粉丝点击