架构流程图
说明
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。