千言万语不如一张图!算法
Spark应用运行原理图架构
反射
的方式,建立和构造一个DriverActor进程,就是咱们常常说的Driver,该进程负责执行咱们的Application
,也就是咱们编写的代码。 SparkConf
,接着建立SparkContext对象
,SparkContext在初始化的时候,会构造DAGSchedule和TaskScheduler
。 TaskSchedule
接着经过启动本身的后台进程,去链接Master,向Master注册Application。 资源调度算法
,为该Application分配运行资源,分配完成后就通知Spark集群上相应的Worker节点,为这个Application启动分配数量的Executor。 Executor启动以后会本身反向注册到TaskScheduler上去
。 每执行到一个action操做,就会建立一个Job
,Driver会将Job提交给DAGSchedule,DAGSchedule会将job基于Stage划分算法划分为多个stage
,而后每一个stage做为TaskSets
提交到TaskSchedule,随后TaskSchedule会将TaskSet里每个Task(task分配算法
)提交到Executor上执行。(task分配算法) TaskRunner
(将咱们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,而后执行task)来封装task,而后从线程池
(每个Executor都有一个线程池)里取出一个线程,执行这个task。 shuffleMapTask和ResultTask
,每一个Job中只有最后一个stage是ResultTask。 就是stage分批次做为taskset提交到Executor执行,每一个task针对RDD的一个partition,执行咱们定义的算子和函数
,以此类推,直到全部操做执行结束为止。注意:这是整体架构归纳,后面的博文将对其中的各个组件和功能进行深度剖析!函数