Spark之核心组件
一、Spark核心组件
实际工作中,会使用YARN Cluster模式。Spark在执行过程中懒执行,直到action操作时才触发job,之后根据宽依赖划分stage,stage被整理成TaskSet,TaskSet里面有多个task,每个task被分发到具体的executor里执行。
Spark驱动节点,用于执行Spark任务中的main方法,负责实际代码的执行工作。Driver在Spark作业执行时主要负责:
Executor节点是一个JVM进程,负责运行具体任务,任务之间相互独立。
Spark应用启动时,Executor节点被同时启动,并且始终伴随着整个Spark应用的生命周期。
如果有Executor节点发生故障或者崩溃,Spark应用会将出错节点上的任务调度到其他Executor节点上继续运行。
1)负责运行组成Spark应用的任务,并将结果返回给驱动器进程;
2)Executor通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
不论Spark以何种模式进行部署,任务提交后,都会先启动Driver进程,随后Driver进程向集群管理器注册应用程序,之后集群管理器根据配置文件分配并启动Executor,当Driver所需的资源全部满足后,Driver开始执行main函数,Spark查询为懒执行,当执行到action算子时开始反向推算,根据宽依赖进行stage划分,随后每一个stage对应一个taskset,taskset中有多个task,根据本地化原则,task会被分发到指定的executor去执行,在任务执行过程中,Executor也会不断与Driver进行通信,报告任务运行情况。
在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上执行。