四, Spark 运行架构
4.1 整体架构
- Spark框架的核心是一个计算引擎, 整体来说, 它采用了
主-从master-slave 的结构 - 下图是Spark执行时的基本结构,
Driver 表示master: 负责管理整个集群中的作业任务调度 Executor 是slave: 负责实际执行任务
- Spark Apllication的运行架构由两部分组成:
Driver program(SparkContext) 和Excutor , Spark Application一般都是在集群中运行, 比如Spark Standalone, YARN, Mesos, 这个集群模式给Spark Application 提供了计算资源, 并对这些资源进行管理, 这些资源既可以给executor运行, 也可以给Driver Progam运行. - 根据Spark Allication的Driver program是否在资源集群中运行, Spark Application的运行方式又可以分为
Cluster模式 和 Client模式 ;
有必要掌握的基本术语:
术语 | 解释 |
---|
Application | 类似于MR中的概念, 指的是用户编写的Spark应用程序 , 内含有一个Driver功能的代码和分布在集群中多个节点上运行的Excutor代码 | Driver Program | 运行Application 的main()函数并且创建SparkContext , 通常用SparkContext代表Driver Program; 其中创建SparkContext的目的是为了准备Spark应用程序的运行环境; 在Spark中由SparkContext负责和ClusterManager通信, 进行资源的申请, 任务的分配和监控; 当Excutor部分运行完毕后, Driver负责将SparkContext关闭. | Excutor | 为某个Application运行在Worker节点上的一个进程 , Excutor进程负责运行Task, 并且负责将数据存在内存或者磁盘上; 每个Application都有各自独立的excutors | Cluster Manager | 指的是在集群上获取资源的外部服务 ,目前有: ? Standalone:Spark原生的资源管理,由Master负责资源的分配;? Hadoop Yarn:由YARN中的ResourceManager负责资源的分配; | Worker NOde | 集群中任何可运行Application代码的节点 , 在Standalone模式中指的就是通过Slave文件配置的Worker节点,在Spark on Yarn模式中指的就是NodeManager节点 | Job | 包含多个Task组成的并行计算 , 往往由Spark Action催生, 一个Job包含多个RDD及作用在相应RDD上的各种Operation; | Stage | 每个Job会被拆分为很多组Task, 每一组任务叫Stage , 或者叫TaskSet | Task | 被送到某个Excutor上的工作任务 | RDD | Spark的基本计算单元, 可以通过一系列算子进行操作(主要有Trasformation和 Action操作) | DAG Scheduler | 根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler | Task Scheduler | 将Taskset提交给worker(集群)运行并回报结果 |
4.2 核心组件
4.2.1 Driver && Excutor 计算组件
Driver: 运行Spark Application的main()函数, 并创建SparkContext
Driver 功能 |
---|
1. 将用户程序(Spark Application)转化为作业(job) | 2. 在 Excutor 之间调度任务(task) | 3. 跟踪Excutor 的执行情况 | 4. 通过UI 展示查询运行情况 |
Excutor: Worker Node中的一个JVM进程, 用来执行分配给该节点的Task,任务彼此之间相互独立; Spark 应用启动时,Executor节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有Executor节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。
Excutor核心功能 |
---|
负责运行组成Spark应用的任务,并将结果返回给驱动器进程 | 通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。RDD 是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。 |
4.2.2 Master && Worker 资源(只存在于StandAlone中)
Spark集群的独立部署环境(StandAlone)中,不需要依赖其他的资源调度框架,自身就实现了资源调度的功能,所以环境中还有其他两个核心组件:Master和Worker ,
- 这里的Master是一个进程,主要负责
资源的调度和分配,并进行集群的监控 等职责,类似于Yarn环境中的RM, - 而Worker呢,也是进程,一个Worker运行在集群中的一台服务器上,由Master分配资源
对数据进行并行的处理和计算 ,类似于Yarn环境中NM。
4.2.3 ApplicationMaster (AM) 计算-> AM -> 资源
Hadoop用户向YARN集群提交应用程序时,提交程序中应该包含ApplicationMaster,用于向资源调度器申请执行任务的资源容器Container,运行用户自己的程序任务job,监控整个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。
- 说的简单点就是,ResourceManager(资源)和Driver(计算)之间的解耦合靠的就是ApplicationMaster。
4.3 核心概念
4.3.1 Excutor与Core (核)
4.3.2 并行度(Parallelism)
- 在分布式计算框架中一般都是多个任务同时进行,由于任务分布在不同的计算结点进行计算, 所有能够真正的实现多任务并行执行, 记住, 这里是并行, 而不是并发.
- 这里我们将
整个集群并行执行任务的数量称之为并行度 , 一个作业的并行度是多少取决于框架的默认配置, 应用程序也可以在运行过程中动态修改;
并行: 同一时刻(某个时间点), 一起执行(parallelism) 并发: 某个时间段, 交替快速执行(Concurrence)
4.3.3 有向无环图(DAG)
4.4 Spark提交流程
- 所谓的提交流程, 其实就是开发人员根据需求写的应用程序通过Spark客户端提交给Spark运行环境执行计算的流程
- Spark运行架构参见下面示意图:
- 构建Spark Application的运行环境(启动SparkContext)
- SparkContext向资源管理器(可以是Standalone、Mesos、Yarn)申请运行>3. Executor资源,并启动StandaloneExecutorBackend,executor向 SparkContext申请Task。
- SparkContext将应用程序代码发放给executor
- SparkContext构建成DAG图、将DAG图分解成Stage、将Taskset发送给Task Scheduler、最后由Task Scheduler将Task发放给Executor运行。
- Task在Executor上运行,运行完毕释放所有资源。
4.4.1 Spark on Standalone运行过程(client模式) (阅读源码后补充)
4.4.2 Spark on YARN 运行过程(cluster模式) (阅读源码后补充)
|