spark 从入门到放弃十一: 内核架构深度剖析之执行流程



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

前篇主要介绍到了 spark action, 算子等一些简答的 demo 操作。那么那些操作是怎么在 spark 中运行的呢。下面将进行逐步的介绍。

图解:

说明:

1. 首先会将编写的程序 jar 包上传到有 spark 客户端的机器上通过 spark-submit 提交到集群上面取运行。这个 jar 在 spark 中有个专有名词叫 Application.

2. 通过 spark-submit 提交的方式。之前的那种提交模式叫做 standalone, 其实会通过反射的方式,创建个构造出一个 DriverActor 进程出来. 就叫他 Driver.

3.Driver 进程回去执行 Application, 也就是取执行我们编写的代码。回顾一下之前编写的 spark 应用。先构造 Sparkconf, 在构造 SparkContext.。 SparkContext 在初始化的时候做的最重要的两件事就是构造出来 DAGScheduler 和 TaskScheduler.

4.TaskScheduler 在构造 TaskScheduler 的时候,会去连接 spark 集群中的 master 节点。向 master 节点注册 application.

5.master 接受到 application 的注册请求后会使用自己的资源调度算法(后面会介绍)在 spark 集群的 worker 为这个 application 启动一个或者多个 Executer.

6.worker 会为了 Application 启动一个或者多个 Executer。

7.Executer 启动之后会自己反向注册到 TaskScheduler 上。这样 TaskScheduler 就知道服务于这个 Application 的 Executer 有那些了

8. 所有当前 Application 的 Executer 都反向注册到 TaskScheduler 上之后,Driver 结束 SparkContext 的初始化,去执行编写的代码。

9. 每执行到一个 action 操作时,就会创建一个 job.job 会提交给 DAGScheduler

10.DAGScheduler 会将 job 划分成多个 stage(Stage 划分算法后面会介绍). 然后为每一个 stage 创建一个 TaskSet.

11. 每一个 TaskSet 会提交给 TaskScheduler。TaskScheduler 会将 TaskSet 中每一个 task 提交到 Executer 中执行(task 分配算法会在后面介绍)

12.Executer 每接受到一个 task. 都会用 TaskRunner 来封装 task. 然后从线程池中取出一个线程来执行这个 task.

13.TaskRunner 将编写的代码,也就是要执行的算子以及函数,拷贝,反序列化。然后执行 task.

14.Task 有两种一种是 ShuffleMapTask 和 ResultTask. 只有最后一个 Stage 是 ResultTask 其他都是 ShuffleMapTask。

15. 所以最后整个 spark 程序应用的执行。就是 stage 分批次作为 tasker 提交到 Executer 中执行,每个 task 针对 RDD 的一个 partition. 执行我们定义的算子和函数。

16 依次类推知道所有操作执行完。


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com