Spark 运行架构核心理解总结

先讲下用到的关键词并附上个人的理解!

 

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汇报任务执行情况

接下来主要讲下它的执行逻辑顺序

    1.提交自己的Application

   2.选择Spark-submit

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

你可能感兴趣的:(Spark,Spark)