提交spark程序(apliaction)
会通过反射再本机上生成一个driveractor(提交方式是standalone)
执行application程序首先构造出sparkconf然后构造出sparkcontext
sparkcontext初始化的时候生出两个调度器DASGSchuleder和TaskSchulerder
TaskSchulerder会到spark集群Master上注册资源,
Master收到注册资源请求后 会通过自己的资源调度算法,在集群的Worker上为spark应用程序启动多个executor 进程
Executor启动会反向注册信息到TaskSchulerder上,反向注册之后结束SparkContext的初始化工作
继续执行我们编写的spark程序,没执行一个action就会创建一个job 提交个DASGSchulerder,
DASGSchulerder会根据stage划分算法,生成多个stage,
每一个stage会创建一个TaskSet,然后提交个 TaskSchuleder,TaskSchuleder将任务会根据task分配算法将taskset中的每一个task提交到executor上执行,
executor每接收到一个task都会用TaskRuner来封装Task,
然从线程池中取出一个线程执行这个task(TaskRunner会把我们编写的代码中要执行的算子、函数 拷贝,
反序列化然后执行task{task分为两种,一种是ShuffleMapTask,一种是ResultMapTask,只有最后一个stage的时候才是resultMapTask} )
整个spark应用程序的执行就是 stage分批次提交到executor上执行,每一个task针对的是RDD中的一个patition,执行我们的函数和算子,以此类推知道所有
的操作执行完为止