1 Application:(自己写的Spark程序)
2 spark-submit:(Spark的提交方式有三种{1.yarn-cluster提交模式 2.yarn-client提交模式 3.Standalone})
3.Driver:运行应用程序(Application)的main函数和创建SparkContext的程序。
4 SparkContext:在初始化的时候做两件事:就是构造出来DAGSchedule和TaskScheduler..
5. Master:通知worker启动Executor,
6 Worker:worker会为Application启动Executer
7.Executor:(进程)启动之后会反向注册到TaskScheduler上去
8 Job:包含多个Task的并行计算,往往由Spark Action(如save,collect)触发生成,一个Application中往往会产生多个Job
9. DAGScheduler:基于Stage的逻辑调度模块,负责将每个Job分割成一个DAG图
10 TaskScheduler:基于Task的任务调度模块,负责每个Task的跟踪和向DAGScheduler汇报任务执行情况
3.进入Driver进程,执行Application程序就是自己写的Spark程序,(Driver这一层包含了SparkConf,SparkContext,job,DAGScheduler,TaskScheduler)
执行到SparkContext:它会构造出DAGScheduler,和TaskScheduler,
然后TaskScheduler会负责通过它对应的后台进程去连接Master,向Master注册Application
Master接收到Application注册请求之后,会使用自己资源调度算法,在Spark集群的Worker上为这个Application启动多个Executer.
Executer启动之后会反向主持到TaskScheduler上去。
当所有的Executer都反向注册到Driver上之后Driver结束SparkContext初始化。会继续执行Application程序!
每执行一个action就会创建一个Job,job会提交给DAGScheduler,它会将job划分为多个stage,每一个stage会创建一个TaskSet。
TaskScheduler会把TaskSet里每一个task提交到executer上执行
Executer每次接收到task都会用TaskRunner来封装Task,然后到线程池中取出一个线程,执行task
TaskRunner:将我们自己编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行Task,
(TaskRunner分为两种,SuffleMapTask和ResultTask,只有最后一个stage是ResultTask)
所以,最后整个spark应用程序的执行,就是stage分批次作为taskset提交到executor执行,每个task针对RDD的一个partition,执行程序中的算子和函数,依次类推直到执行完毕!
Copyright xiao ou