spark源码总结

一、spark组件

1、Application

用户编写的应用程序代码,包含启动一个Driver,以及在executors上运行的业务逻辑代码。

2、Driver

driver负责高层次的任务管理,包括该application中包含的所有的资源和任务运行状态。

3、Executor

executor就是一个进程,负责启动task线程运行task

4、Task

task是线程级的,与partitions对应,一个taskSet则对应一个stage

5、master、worker

master是集群资源管理中心,master和worker一起负责资源的分配和管理。

worker则可以对executor进行控制。

driver和executor也可以进行交互,对分配的资源进行使用。

这里写图片描述

二、spark组件交互

(1)、spark-submit与master

1.spark-submit提交Application,在DriverClient中生成ClientEndpoint,负责与Master通信;

2.通过ClientEndpoint,DriverClient像Master发送一个RequestSubmitDriver消息,表示要提交用户应用程序了;

3.Master收到后,向DriverClient回复SubmitDriverResponse,完成Application在Master中的注册;

4.DriverClient接收消息后再次发送RequestDriverStatus,询问Driver节点是否准备好;

5.此时Master开始创建Driver进程。

(2)Master与Worker—创建Driver进程

1.master向某一个worker发送launchDriver的命令;

2.worker接收到后就会启动一个DriverRunner线程启动一个Driver进程

(3)Driver与Master

1.Driver启动后会进行一系列初始化,第一步就是创建SparkContext对象;

2.创建SparkEnv,通过SparkEnv进一步创建一些管理组件,如securityManager,RpcEnv等;

3.创建任务调度组件

3.1 创建TaskScheduler,负责Task的调度;

3.2 创建StandaloneSchedulerBackend,负责实质的调度,以及与集群进行资源分配的交互;

3.3 创建DriverEndpoint,负责其他组件与Driver的通信;

3.4 StandaloneSchedulerBackend创建ClineEndpoint,负责与Masrte的通信,主要是注册Application;

(4)Master与Executor
1. Master向worker发送launchExecutor的消息,同时Master向Driver发送ExecutorAdded消息;
2. Worker收到消息后,启动ExecutorRunner线程去执行launchExecutor的任务,并向Master回复状态变化的消息;
3.Master确认后,向Driver发送ExecutorUpdated,表示Executor已经启动。

你可能感兴趣的:(spark)