大数据spark任务生成和提成流程详解

4、Master收到任务信息后,将任务信息存到内存中,同时放到队列中(waitingApp)

5、任务信息开始执行后,调用schedule方法,进行资源的调度。

6、将调度好的资源封装到LaunchExecutor并发送给对应的worker。

7、worker接收到master发送来的任务调度信息(LaunchExecutor),将信息封装

成一个ExecutorRunner对象。

8、封装成ExecutorRunner后,调用ExecutorRunner的·start方法,开始启动GoarseGrainedExecutorBackend对象

9、Executor启动后DriverActor进行反向注册。

10、与DriverActor注册成功后,创建一个线程池(TreadPool)用来执行任务

11、当所有的Executor注册完成后,意味着作业环境准备好了,Driver端会结束与

sparkContext对象的初始化。

12、当Driver初始化完成后(创建一个sc实例)会继续执行我们自己提交的App

代码,当触发了action算子时就会触发一个job,这时就会调用DAGScheduler对象

进行Stage划分。

13、DagScheduler开始进行stage划分。

14、将划分好的stage按照分区生成一个一个的task,并且封装到TaskSet对象中

然后TaskSet提交到TaskScheduler

15、TaskScheduler按照提交过来的TaskSet,拿到一个序列化器,将TaskSet序列化

,将序列化好的Task封装到LaunchExecutor并且提交到DriverActor。

16、DriverActor把LauchExcutor发送到Excutro上。

17、Executor接收到DriverActor发送过来的任务(LaunchExecutro),会将其封装成为

TaskRunner,然后从线程池中获取线程来执行TaskRunner。

18、TaskRunner拿到反序列化器,反序列Taskset,然后执行App代码,也就是对

RDD分区上执行的算子和自定义函数。

ClientActor:负责和Master通信,向Master注册任务信息

DriverActor:负责和Executor进行通信,接收到 Executor反向注册和把任务发送到Executer。


分享到:


相關文章: