图解Spark内核架构

来源:互联网 发布:js和php的区别 编辑:程序博客网 时间:2024/06/05 06:52

1. 假设现在有一台提交spark应用的机器,自己编写的应用程序在spark中称为Application,通过spark-submit结合shell提交Application。

2. 提交之后会在本地客户端启动一个进程叫做Driver,spark-submit使用standalone模式提交,会通过反射的方式,创建和构造一个DriverActor进程。

3. Driver进程会先构造SparkConf,再构造SparkContext。

4. SparkContext在初始化时,做的最重要的两件事就是构造DAGScheduler和TaskScheduler。

5. TaskScheduler会通过它对应的一个后台进程,去连接Master,然后向Master注册Application。

6. Master接收到Application注册的请求之后,会使用自己的资源调度算法,在Spark集群的Worker上,为这个Application启动多个Executor(进程)。

7. Executor启动之后,会自己反向注册到TaskScheduler上去。

8 所有的Executor都反向注册到Driver之后,Driver结束SparkContext初始化,会继续执行编写的代码。

9. 每执行一个action,就会创建一个job。

10. job会提交给DAGScheduler,DAGScheduler会将job划分为多个stage(使用stage算法),然后每个stage会创建一个TaskSet。

11. TaskScheduler会把taskset里面每一个task提交到Executor上执行(使用task分配算法)。

12. Executor每接收到一个task,都会用TaskRunner接收task,然后从线程池里取出一个线程执行这个task。 

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

14. Task有两种,ShuffleMapTask和ResultTask,之前的stage,都是ShuffleMapTask。

15. 所以,最后整个spark应用程序的执行,就是stage分批次作为taskset提交到Executor执行,每个task针对RDD的一个Partition,执行定义的算子和函数。依次类推,直到所有操作执行完为止。

0 0
原创粉丝点击