一、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已经启动。