Spark内核流程详解

下图是以standalone模式提交应用执行的流程

Spark内核流程详解

流程

1、首先是提交打包的应用程序,使用Spark submit或者spark shell工具执行。

2、提交应用程序到集群,集群会启动Driver进程。

注意:(1)client模式:Driver进程是在客户端启动,客户端就是指提交应用程序的当前节点,该模式适合测试环境

          (2)cluster模式:Driver会随机在集群一台节点启动Driver进程

3、始构建Spark应用上下文。一个Spark应用程序都会先创建一个Sparkconf,然后来创建SparkContext

在创建SparkContext对象时有两个重要的对象,DAGScheduler和TaskScheduler

4、构建好TaskScheduler后,它对应着一个后台进程,接着它会去连接Master集群,向Master集群注册Application

5、Master节点接收到应用程序之后,会向该Application分配资源,启动一个或者多个Worker节点。

6、每一个Worker节点会为该应用启动一个Executor进程来执行该应用程序。

7、向Master节点注册应用之后,master为应用分配了节点资源,在Worker启动Executor完成之后,此时,Executo会向TaskScheduler反向注册,以让它知道Master为应用程序分配了哪几台Worker节点和Executor进程来执行任务。到此时为止,整个SparkContext创建完成。
8、创建好SparkContext之后,继续执行应用程序,每执行一个action操作就创建为一个job,将job交给DAGScheduler执行,然后DAGScheduler会将job划分为多个stage(这里涉及到stage的划分算法,比较复杂)。然后每一个stage创建一个TaskSet。

9、TaskScheduler有自己的后台进程会处理创建好的TaskSet

10、将TaskSet中的每一个task提交到Executor上去执行

11、Executor会创建一个线程池,当executor接收到一个任务时就从线程池中拿出来一个线程将Task封装为一个TaskRunner。

12、在TaskRunner中会将程序的拷贝,反序列化等操作,然后执行每一个Task。对于这个Task一般有两种,ShufflerMapTask和ResultTask,只有最后一个stage的task是ResultTask,其它的都是ShufflerMapTask。

13、整个spark应用程序的执行就是stage分批次作为taskset提交到exceutor执行,每个task针对RDD的一个partition,执行定义好的算子和函数,直到所有操作执行完为止。