美文网首页
Spark内核架构深度剖析

Spark内核架构深度剖析

作者: SunnyMore | 来源:发表于2018-05-29 09:43 被阅读21次
    内核架构剖析.png

    流程详解

      1. 使用Standalone提交模式,将我们编写好的Application打成jar包上传到某Spark节点上,通过spark-submit提交Application,该命令运行后在该节点会通过反射的方式,创建和构造一个DriverActor进程,就是我们经常说的Driver,该进程负责执行我们的Application,也就是我们编写的代码。
      1. 就像我们编写代码一样,Driver进程首先构造SparkConf,接着创建SparkContext对象,SparkContext在初始化的时候,会构造DAGSchedulerTaskScheduler
      1. TaskScheduler接着通过启动自己的后台进程,去连接Master,向Master注册Application
      1. Master收到Application注册的请求后,会使用自己的资源调度算法,为该Application分配运行资源,分配完成后就通知Spark集群上相应的Worker节点,为这个Application启动分配一定数量的Executor
      1. Executor启动之后会自己反向注册到TaskScheduler上去。
      1. 当所有Executor完成反向注册后,DriverActor继续执行应用程序中的代码,每执行到一个action操作,就会创建一个JobDriver会将Job提交给DAGSchedulerDAGScheduler会将Job基于Stage划分算法划分为多个Stage,然后每个Stage作为TaskSets提交到TaskScheduler,随后TaskScheduler会将TaskSet里每一个TaskTask分配算法)提交到Executor上执行。
      1. Executor每接收到一个Task,都会用TaskRunner(将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行Task)来封装Task,然后从线程池(每一个Executor都有一个线程池)里取出一个线程,执行这个Task
      1. Task有两种,ShuffleMapTaskResultTask,每个Job中只有最后一个StageResultTask
      1. 所以最后整个Spark应用程序的执行,就是Stage分批次作为Taskset提交到Executor执行,每个Task针对RDD的一个Partition,执行我们定义的算子和函数,以此类推,直到所有操作执行结束为止。

    相关文章

      网友评论

          本文标题:Spark内核架构深度剖析

          本文链接:https://www.haomeiwen.com/subject/jvjojftx.html