spark内核架构剖析--Application执行过程

以standalone模式(基于spark的Master—Worker)解析spark内核架构,先罗列spark内核中的几个概念再详解程序的执行流程。

一、常用名词

1、Application
2、spark-submit
3、Driver
4、SparkContext
5、Master
6、Worker
7、Executor
8、Job
9、DAGScheduler
10、TaskScheduler

11、ShuffleMapTask and ResultTask

二、架构详解

1、在客户端机器上用spark-submit来提交我们的程序,以standload模式来提交作业

2、spark会通过反射的方式,创建和构造一个DriverActor进程(Driver进程的作用是执行我们的Application,就是我们的代码)

3、从代码中可以看出,每次都是先构造SparkConf,在构造SparkContext或SparkSession

4、sparkContext在初始化时,做的最重要两件事就是构造DAGScheduler和TaskScheduler(它有自己的后台进程)

5、TaskSchedule实际上,负责通过后台进程去连接Master,向Master注册Application

6、Master接收到Application注册请求后,会使用自己的资源调度算法,在spark集群的worker上,为这个Application启动多个Executor

7、Master会连接Worker,通知worker为Application启动一个或多个Executor(进程)

8、Executor启动后,第一件事情是到反向注册到TaskScheduler上,这样TaskScheduler就知道服务于自己的Application的Executor有哪些

9、所有的Executor注册到TaskScheduler后,Driver就完成了sparkContext或sparkSession的初始化,

10、继续执行代码 ,每执行到一个Action就会创建一个job

11、job会被提交给DAGScheduler,DAGScheduler会调用stage划分算法,将job划分为多个stage,每个stage创建一个stageSet

12、DAGScheduler会把stageSet给到TaskScheduler,TaskScheduler会把每个TaskSet里每个task提交到executor上执行(task分配算法

13、executor中有个重要的组件--线程池。Executor每接收到一个task,都会用TaskRunner来封装task,然后从线程池里取出一个线程来执行这个task

14、TaskRunner的作用是将我们编写的代码,也就是要执行的算子和函数,拷贝、反序列化,然后执行task

15、Task有两种:ShuffleMapTask和ResultTask,只有最后一个stage是ResultTask,其他都是ShuffleMapTask

16、所以,最后整个spark应用程序的执行,就是stage分批次作为taskSet提交到executor执行,每个task针对RDD的一个partition,执行我们定义的算子和函数。以此类推,直到所有操作执行结束

spark内核架构剖析--Application执行过程