spark 内核源码剖析一:Sprak内核架构

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

Spark应用程序执行过程
1、通过spark-submit——shell 脚本提交Application(自己的Spark程序)——启动一个Driver进程;当然还有别的方式提交Application,后面会继续介绍
2、Driver执行Application应用程序,生成SparkContext(下面3—8步都是在进行SparkContext初始化)
3、SparkContext在初始化时,会构造DAGScheduler和TaskScheduler
4、TaskScheduler通过它对应的一个后台进程,去连接Master,向Master注册Application
5、Master接收到Application注册的请求之后,会使用自己的资源调度算法,通知Worker,为这个Application启动多个Executor
6、worker会为Application启动Executor
7、Executor启动之后会自己反向注册到TaskScheduler
8、所有Executor都反向注册到Driver上之后,Driver结束SparkContext初始化,会继续执行我们自己编写的代码
9、继续执行代码,每执行一个action,就会创建一个Job,Job 会提交给DAGScheduler
10、DAGScheduler会将job划分为多个stage,然后为每个stage创建一个TaskSet(stage划分算法)
11、DAGScheduler创建完成taskSet以后,TaskScheduler会把TaskSet里的每一个task提交到Executor执行(task分配算法)
12、Executor每接收到一个task,都会用TaskRunner来封装task,然后从线程池取出一个线程,执行这个task
13、所以,最后整个spark应用程序的执行,就是stage分批次作为taskSet提交到Executor执行,每个task针对RDD的一个partiton,执行我们定义的算子和函数,以此类推,直到所有的操作都执行为止

Task有两种,ShuffleMapTask和ResultTask,只有最后一个stage是ResultTask,之前的stage,都是ShuffleMapTask

13194828-d5decf42676f22b1.png
image.png

猜你喜欢

转载自blog.csdn.net/weixin_34379433/article/details/87237918