本文主要介绍了spark运行的大概流程。已经每个组件大概做了什么工作
1、Spark-submit提交的时候有多种方式,其实会通过反射的方式,创建和构造一个DriverActor进程出来
2、在构造SparkContext的时候,构造出DAGScheduler和TaskScheduler
3、DAGScheduler会将job划分为多个stage,然后每个stage创建一个Taskset
4、TaskScheduler通过后台进程去连接Master,并且向Master注册application
5、Master接收到Application注册的请求之后,会使用自己的资源调度算法,在Spark集群的worker上为这个application启动多个Executor
6、Master通知work启动Executor
7、Executor启动之后会自己反向注册到TaskScheduler上去
8、work会为application启动Executor
9、TaskScheduler会把Taskset里每一个task提交到executor上执行
10、Executor每接收到一个task,都会用TaskRunner来封装task,然后从线程池里取出一个线程,执行这个task
11、TaskRunner将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行
12、Task有2种,shuffleMapTask和ResultTask,只有最后一个Stage是ResultTask,之前的stage都是ShuffleMapTask
13、最后整个spark应用程序就是stage分批次作为taskset提交到executor执行,每个task针对RDD的一个partition,执行我们定义的算子和函数