Spark之核心组件

一、Spark核心组件

实际工作中,会使用YARN Cluster模式。Spark在执行过程中懒执行,直到action操作时才触发job,之后根据宽依赖划分stage,stage被整理成TaskSet,TaskSet里面有多个task,每个task被分发到具体的executor里执行。

1、Driver

Spark驱动节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:

1)将用户程序转化为job;

2)在Executor之间调度Task;

3)跟踪Executor的执行情况;

4)通过UI查询展示运行情况;

2、Executor

Executor节点是一个JVM进程,负责运行具体任务,任务之间相互独立。

Spark应用启动时,Executor节点被同时启动,并且始终伴随着整个Spark应用的生命周期。

如果有Executor节点发生故障或者崩溃,Spark应用会将出错节点上的任务调度到其他Executor节点上继续运行。

Executor有两个核心功能:

1)负责运行组成Spark应用的任务,并将结果返回给驱动器进程;

2)Executor通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

3、Spark通用运行流程概述:    

Spark之核心组件

不论Spark以何种模式进行部署,任务提交后,都会先启动Driver进程,随后Driver进程集群管理器注册应用程序,之后集群管理器根据配置文件分配并启动Executor,当Driver所需的资源全部满足后,Driver开始执行main函数,Spark查询为懒执行,当执行到action算子时开始反向推算,根据宽依赖进行stage划分,随后每一个stage对应一个taskset,taskset中有多个task,根据本地化原则,task会被分发到指定的executor去执行,在任务执行过程中,Executor也会不断与Driver进行通信,报告任务运行情况。

4、YARN Cluster模式:

Spark之核心组件

在YARN Cluster模式下,任务提交后会和ResourceManager通讯申请启动 ApplicationMaster, 随后 ResourceManager  分配 container,在合适的 NodeManager上启动 ApplicationMaster,此时的 ApplicationMaster 就是 Driver。

Driver 启动后向 ResourceManager 申请 Executor内存,ResourceManager接到ApplicationMaster 的资源申请后会分配 container,然后在合适的 NodeManager 上启动 Executor 进程,Executor 进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,之后执行到 Action 算子时,触发一个 job,并根据宽依赖开始划分 stage,每个stage生成对应的taskSet,之后将 task  分发到各个Executor上执行。