Spark内核系列(一)Spark内核架构

架构流程图

Spark内核系列(一)Spark内核架构_第1张图片

说明

1. SparkContext初始化 (Standalone模式)

1.首先spark-submit提交Spark应用程序Application.

2.提交之后spark会通过反射的方式创建和构造一个DriverActor进程(Driver进程).

3.Driver进程启动后会进行SparkContext初始化,SparkContext初始化过程中做的最重要的两件事就是构造DAGScheduler和TaskScheduler.

4.构造完TaskScheduler时,TaskScheduler会去连接Master并向Master注册Application

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

6.Executor启动之后反注册到TaskScheduler.

7.当所有Executor都反向注册到TaskScheduler之后,Driver结束SparkContext的初始化。至此,SparkContext的初始化就告一段落了,接着会继续执行我们自己编写的代码。

2.TaskSet的创建与提交

1.上面讲到,SparkContext的初始化完成之后,接着会继续执行我们自己编写的代码,每执行到一个Action操作就会创建一个job,该job会提交到DAGScheduler,划分为多个stage(stage划分算法),然后为每个stage创建一个TaskSet.

2.TaskScheduler把TaskSet中的每一个task提交到executor上执行。哪些task提交到哪些executor上执行?(task分配算法).

3.executor执行task

1.Executor每次收到一个task都会用TaskRunner来封装task,然后从线程池里取出一个线程执行这个task.(TaskRunner将需执行的算子及函数、拷贝、反序列化然后执行task.)

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

小结:整个spark应用程序的执行,就是stage分批次作为taskset提交到executor执行,每个task针对RDD的一个partition执行我们定义的算子和函数,以此类推,直到所有操作执行完成为止。另外,上面提到了三个算法,‘Master 的资源调度算法’,‘ stage划分算法 ’,‘ task分配算法 ’,在后面的文章中再详细介绍。

你可能感兴趣的:(Spark内核系列(一)Spark内核架构)