spark:spark内核架构

1.首先用spark-submit提交我们的application,那么在standalone模式下,会在client启动一个Driver进程,这个driver就是执行我们的application应用程序,也就是我们编写的代码。

2.driver做的第一件事情就去构造 sparkContext,构造sparkContext 就会初始化我们的DAGScheduler和TaskScheduler.

3.构造完TaskScheduler后,会到Master去注册我们的application.

4.master会根据自己的资源调度算法去worker上启动executor,executor启动完后会到taskScheduler反向注册.

5.反向注册之后,就会执行我们编写的代码,每次执行到action操作时,就会创建一个job.

6.这个job就会给DAGScheduler,DAGScheduler就会根据自己的stage划分算法,把job划分成多个stage.

7.每个stage就会创建一个taskSet,taskSet会提交给TaskScheduler,TaskScheduler就会把taskset分配到刚才反向注册过来的executor上取执行。

8.executor接受到task后,会用TaskRunner来封装task,然后从线程池中取出一个task来执行。执行就是要执行算子以及函数,拷贝,反序列化,然后执行task.

9.task分为两种,ShuffleMapTask和ResultTask,只有最后一个stage是ResultTask,之前的stage,都是ShuffleMapTask.

10.所以整个spark应用程序的执行,就是stage分批次作为taskset提交到executor执行,每个task针对Rdd的一个partition,执行我们定义的算子函数。以此类推,直到执行所有的操作。

推荐阅读更多精彩内容