Spark学习笔记-入门(2)-Spark运行架构

运行架构

Spark框架的核心是一个计算引擎,采用了标准的主从结构。整体架构中包括Driver以及Executor。其中Driver是Master,负责整个集群中的作业任务调度,而Executor则是Slave(Worker),负责实际的任务执行。

Spark框架有如下两个核心组件:

Driver: Spark驱动节点,用于执行Spark任务中的main方法。所谓的Driver就是驱使整个应用运行起来的程序,也称之为Driver类

  • 将用户任务转化为作业(Job)
  • 在Executor之间进行任务调度
  • 跟踪Executor的执行情况
  • 通过UI展示查询运行情况

Executor: Spark Executor是集群中工作节点的一个JVM进程,负责在Spark作业中运行具体任务,任务之间彼此独立。如果有Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行

  • 负责运行Spark应用的任务,并将结果返回给驱动器进程
  • 通过自身的块管理器为用户程序中要求缓存的RDD提供内存存储。RDD直接缓存在Executor进程当中,因此任务可以在运行时充分利用缓存数据加速运算

除了上面提到的两个核心组件,Spark中还有以下的组件:

Master & Worker: 如果Spark集群采用独立部署环境,则不需要其他的资源调度框架,自身已经实现了资源调度的功能。其中:

  • Master进程:主要负责资源的调度和分配,并进行集群的监控(类似于Yarn中的Resource Manager)
  • Worker进程:一个Worker运行在集群中的一台服务器上,管理集群中的一个节点,由Master分配资源对数据进行并行的处理和计算(类似于Yarn中的Node Manager)

Application Master:如果Spark集群采用Yarn作为资源调度,则在向Yarn集群中提交应用程序的时候,提交程序中应该包含Application Master,管理当前的应用任务。

Spark Executor 是集群中运行在工作节点(Worker)中的一个JVM进程,是整个集群中专门用于计算的节点。在提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。这里的资源一般指的是工作节点 Executor 的内存大小和使用的虚拟CPU核(Core)数量

应用程序相关的启动参数如下:

名称 说明
--num-executors 配置Executor的数量
--executor-memory 配置每个Executor的内存大小
--executor-cores 配置每个Executor的虚拟CPU核数量

提交流程

Spark应用程序在提交到Yarn环境中执行的时候,一般会有两种部署执行的方式:Client与Cluster。这两种模式的主要区别在于Driver程序的运行节点位置

Yarn Client模式

Client模式将用于监控和调度的Driver模块运行在客户端,而不是集群中,一般用于测试:

  • Driver在任务提交的本地机器上运行
  • Driver启动后会和Resource Manager通讯申请启动Application Master
  • Resource Manager分配Container,在合适的Node Manager上启动Application Manager,负责向Resource Manager申请Executor内存
  • Resource Manager接受申请,分配Container,然后Application Master在指定的Node Manager上启动Executor进程
  • Executor进程启动后会向Driver反向注册,在Executor全部注册完成之后Driver开始执行main函数
  • 直到执行到行动算子,才触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将Task分发到各个Executor上执行

Yarn Cluster模式

Cluster模式将用于监控和调度的Driver模块运行在Yarn集群中,一般应用于实际生产环境(运行步骤大体上相同,有细节上的差异)

  • 任务提交后与Resource Manager通讯申请启动Application Master
  • Resource Manager分配Container,在合适的Node Manager上启动Application Master,此时的Application Master就是Driver
  • Driver启动后向Resource Manager申请Executor内存
  • Resource Manager接受申请,分配Container,然后Application Master在指定的Node Manager上启动Executor进程
  • Executor进程启动后会向Driver反向注册,在Executor全部注册完成之后Driver开始执行main函数
  • 直到执行到行动算子,才触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将Task分发到各个Executor上执行

Spark学习笔记-入门(2)-Spark运行架构
http://example.com/2022/05/08/Spark学习笔记-入门-2-Spark运行架构/
作者
EverNorif
发布于
2022年5月8日
许可协议