Spark基础学习笔记02:Spark运行时架构
文章目录
- 零、本讲学习目标
- 一、Spark运行时架构
- 二、YARN集群架构
- (一)YARN集群主要组件
- 1、ResourceManager - 资源管理器
- 2、NodeManager - 节点管理器
- 3、Task - 任务
- 4、Container - 容器
- 5、ApplicationMaster - 应用程序管理器
- (二)YARN集群中应用程序的执行流程
- 三、Spark Standalone架构
- (一)client提交方式
- (二)cluster提交方式
- 四、Spark on YARN架构
- (一)client提交方式
- (二)cluster提交方式
- 五、两种提交方式各有应用场合
零、本讲学习目标
- 了解Spark架构
- 了解Spark原理
一、Spark运行时架构
- Spark有多种运行模式,可以运行在一台机器上,称为本地(单机)模式,也可以以YARN或Mesos作为底层资源调度系统以分布式的方式在集群中运行,称为Spark On YARN模式,还可以使用Spark自带的资源调度系统,称为Spark Standalone模式。
- 本地模式通过多线程模拟分布式计算,通常用于对应用程序的简单测试。本地模式在提交应用程序后,将会在本地生成一个名为SparkSubmit的进程,该进程既负责程序的提交,又负责任务的分配、执行和监控等。
二、YARN集群架构
- 在讲解Spark集群架构之前,首先需要了解YARN集群的架构。YARN集群总体上是经典的主/从(Master/Slave)架构,主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。
- YARN集群架构图
(一)YARN集群主要组件
1、ResourceManager - 资源管理器
- 资源管理器以后台进程的形式运行,负责对集群资源进行统一管理和任务调度。主要要职责:接收来自客户端的请求;启动和管理各个应用程序的
ApplicationMaster
;接收来自ApplicationMaster
的资源申请,并为其分配Container
;管理NodeManager
,接收来自NodeManager
的资源和节点健康情况汇报。
2、NodeManager - 节点管理器
- 集群中每个节点上的资源和任务管理器,以后台进程的形式运行。它会定时向
ResourceManager
汇报本节点上的资源(内存、CPU)使用情况和各个Container
的运行状态,同时会接收并处理来自ApplicationMaster
的Container
启动/停止等请求。NodeManager
不会监视任务,它仅监视Container
中的资源使用情况,例如,如果一个Container
消耗的内存比最初分配的更多,它会结束该Container
。
3、Task - 任务
- 应用程序的具体执行任务。一个应用程序可能有多个任务,例如,一个MapReduce程序可以有多个Map任务和多个Reduce任务。
4、Container - 容器
- YARN中资源分配的基本单位,封装了CPU和内存资源的一个容器,相当于是一个Task运行环境的抽象。从实现上看,Container是一个Java抽象类,定义了资源信息。应用程序的Task将会被发布到Container中运行,从而限定Task使用的资源量。
- Container的大小取决于它所包含的资源量。一个节点上的Container数量由节点空闲资源总量(总CPU数和总内存)决定。
- 在YARN的NodeManager节点上拥有许多动态创建的Container。NodeManager会将机器的CPU和内存的一定值抽离成虚拟的值,然后这些虚拟的值根据配置组成多个Container,当应用程序提出申请时,就会对其分配相应的Container。
- 此外,一个应用程序所需的Container分为两类:
运行ApplicationMaster的Container
和运行各类Task的Container
。前者是由ResourceManager向内部的资源调度器申请和启动的,后者是由ApplicationMaster向ResourceManager申请的,并由ApplicationMaster请求NodeManager进行启动。 - 我们可以将Container类比成数据库连接池中的连接,需要的时候进行申请,使用完毕后进行释放,而不需要每次独自创建。
5、ApplicationMaster - 应用程序管理器
应用程序管理器主要负责应用程序的管理,以后台进程的形式运行。为应用程序向ResourceManager申请资源(CPU、内存),并将资源分配给所管理的应用程序的Task。一个应用程序对应一个ApplicationMaster。例如,一个MapReduce应用程序会对应一个ApplicationMaster(MapReduce应用程序运行时会在NodeManager节点上启动一个名为MRAppMaster的进程,该进程则是MapReduce的ApplicationMaster实现),一个Spark应用程序也会对应一个ApplicationMaster。
在用户提交一个应用程序时,会启动一个ApplicationMaster实例,ApplicationMaster会启动所有需要的Task来完成它负责的应用程序,并且监视Task运行状态和运行进度,重新启动失败的Task,等等。应用程序运行完成后,ApplicationMaster会关闭自己并释放自己的Container,以便其他应用程序的ApplicationMaster或Task转移至该Container中运行,提高资源利用率。
ApplicationMaster自身和应用程序的Task都在Container中运行。
ApplicationMaster可在Container内运行任何类型的Task。例如,MapReduce ApplicationMaster请求一个容器来启动Map Task或Reduce Task。也可以实现一个自定义的ApplicationMaster来运行特定的Task,以便任何分布式框架都可以受YARN支持,只要实现了相应的ApplicationMaster即可。
ResourceManager管理整个集群⟹\Longrightarrow⟹NodeManager管理集群中单个节点⟹\Longrightarrow⟹ApplicationMaster管理单个应用程序(集群中可能同时有多个应用程序在运行,每个应用程序都有各自的ApplicationMaster)
(二)YARN集群中应用程序的执行流程
- 客户端提交应用程序(可以是MapReduce程序、Spark程序等)到ResourceManager。
- ResourceManager分配用于运行ApplicationMaster的Container,然后与NodeManager通信,要求它在该Container中启动ApplicationMaster。ApplicationMaster启动后,它将负责此应用程序的整个生命周期。
- ApplicationMaster向ResourceManager注册(注册后可以通过ResourceManager查看应用程序的运行状态)并请求运行应用程序各个Task所需的Container(资源请求是对一些Container的请求)。如果符合条件,ResourceManager就会分配给ApplicationMaster所需的Container(表达为Container ID和主机名)。
- ApplicationMaster请求NodeManager使用这些Container来运行应用程序的相应Task(将Task发布到指定的Container中运行)。
- 各个运行中的Task会通过RPC协议向ApplicationMaster汇报自己的状态和进度,这样一旦某个Task运行失败,ApplicationMaster就可以对其重新启动。当应用程序运行完成时,ApplicationMaster会向ResourceManager申请注销自己。
三、Spark Standalone架构
- Spark Standalone模式为经典的Master/Slave(主/从)架构,资源调度是Spark自己实现的。在Standalone模式中,根据应用程序提交的方式不同,Driver(主控进程)在集群中的位置也有所不同。应用程序的提交方式主要有两种:
client
和cluster
,默认是client
。可以在向Spark集群提交应用程序时使用--deploy-mode
参数指定提交方式。
(一)client提交方式
当提交方式为client时,运行架构如下图所示
集群的主节点称为Master节点,在集群启动时会在主节点启动一个名为Master的守护进程,类似YARN集群的ResourceManager;从节点称为Worker节点,在集群启动时会在各个从节点上启动一个名为Worker的守护进程,类似YARN集群的NodeManager。
Spark
在执行应用程序的过程中会启动Driver
和Executor
两种JVM进程。Driver
为主控进程,负责执行应用程序的main()方法,创建SparkContext
对象(负责与Spark
集群进行交互),提交Spark作业,并将作业转化为Task
(一个作业由多个Task
任务组成),然后在各个Executor
进程间对Task进行调度和监控。通常用SparkContext
代表Driver
。在上图的架构中,Spark
会在客户端启动一个名为SparkSubmit
的进程,Driver
程序则运行于该进程。Executor
为应用程序运行在Worker节点上的一个进程,由Worker进程启动,负责执行具体的Task,并存储数据在内存或磁盘上。每个应用程序都有各自独立的一个或多个Executor进程。在Spark Standalone模式和Spark on YARN模式中,Executor进程的名称为CoarseGrainedExecutorBackend
,类似运行MapReduce
程序所产生的YarnChild
进程,并且同时与Worker
、Driver
都有通信。
(二)cluster提交方式
- 当提交方式为cluster时,运行架构如下图所示
Standalone cluster
提交方式提交应用程序后,客户端仍然会产生一个名为SparkSubmit
的进程,但是该进程会在应用程序提交给集群之后就立即退出。当应用程序运行时,Master
会在集群中选择一个Worker
进程启动一个名为DriverWrapper
的子进程,该子进程即为Driver
进程,所起的作用相当于YARN
集群的ApplicationMaster
角色,类似MapReduce
程序运行时所产生的MRAppMaster
进程。
四、Spark on YARN架构
- Spark On YARN模式遵循YARN的官方规范,YARN只负责资源的管理和调度,运行哪种应用程序由用户自己实现,因此可能在YARN上同时运行MapReduce程序和Spark程序,YARN很好地对每一个程序实现了资源的隔离。这使得Spark与MapReduce可以运行于同一个集群中,共享集群存储资源与计算资源。Spark On YARN模式与Standalone模式一样,也分为
client
和cluster
两种提交方式。
(一)client提交方式
Spark On YARN的client提交方式提交应用程序后的主要进程有:SparkSubmit、ResourceManager、NodeManager、CoarseGrainedExecutorBackend、ExecutorLauncher,运行架构如下图所示:
与Standalone模式的client提交方式类似,客户端会产生一个名为
SparkSubmit
的进程,Driver程序则运行于该进程中,且ResourceManager的功能类似于Standalone模式的Master;NodeManager的功能类似于Standalone模式的Worker。当Spark程序运行时,ResourceManager会在集群中选择一个NodeManager进程启动一个名为ExecutorLauncher的子进程,该子进程是Spark的自定义实现,承担YARN中的ApplicationMaster角色,类似MapReduce的MRAppMaster进程。使用Spark On YARN的client提交方式提交Spark应用程序的执行步骤
(1)客户端向YARN的ResourceManager提交Spark应用程序。客户端本地启动Driver。
(2)ResourceManager收到请求后,选择一个NodeManager节点向其分配一个Container,并在该Container中启动ApplicationMaster(指ExecutorLauncher进程),该ApplicationMaster中不包含Driver程序,只负责启动和监控Executor(指CoarseGrainedExecutorBackend进程),并与客户端的Driver进行通信。
(3)ApplicationMaster向ResourceManager申请Container。ResourceManager收到请求后,向ApplicationMaster分配Container。
(4)ApplicationMaster请求NodeManager,NodeManager在获得的Container中启动CoarseGrainedExecutorBackend。
(5)CoarseGrainedExecutorBackend启动后,向客户端的Driver中的SparkContext注册并申请Task。
(6)CoarseGrainedExecutorBackend得到Task后,开始执行Task,并向SparkContext汇报执行状态和进度等信息。
(二)cluster提交方式
- Spark On YARN的cluster提交方式提交应用程序后的主要进程有:SparkSubmit、ResourceManager、NodeManager、CoarseGrainedExecutorBackend、ApplicationMaster,运行架构如下图所示:
- 与Standalone模式的cluster提交方式类似,客户端仍然会产生一个名为
SparkSubmit
的进程,且ResourceManager的功能类似于Standalone模式的Master;NodeManager的功能类似于Standalone模式的Worker。ResourceManager会在集群中选择一个NodeManager进程启动一个名为ApplicationMaster的子进程,该子进程即为Driver进程(Driver程序运行在其中),同时作为一个YARN中的ApplicationMaster向ResourceManager申请资源,进一步启动Executor(这里指CoarseGrainedExecutorBackend)以运行Task。 - 使用Spark On YARN的cluster提交方式提交Spark应用程序的执行步骤
(1)客户端向YARN的ResourceManager提交Spark应用程序。
(2)ResourceManager收到请求后,选择一个NodeManager节点向其分配一个Container,并在该Container中启动ApplicationMaster,ApplicationMaster中包含SparkContext的初始化。
(3)ApplicationMaster向ResourceManager申请Container。ResourceManager收到请求后,向ApplicationMaster分配Container。
(4)ApplicationMaster请求NodeManager,NodeManager在获得的Container中启动CoarseGrainedExecutorBackend。
(5)CoarseGrainedExecutorBackend启动后,向ApplicationMaster的Driver中的SparkContext注册并申请Task(这一点与Spark On YARN的client方式不一样)。
(6)CoarseGrainedExecutorBackend得到Task后,开始执行Task,并向SparkContext汇报执行状态和进度等信息。
五、两种提交方式各有应用场合
- 无论是Spark On YARN的client提交方式还是Standalone的client提交方式,由于Driver运行在客户端本地,因此适合需要与本地进行交互的场合,例如Spark Shell。这种方式下,客户端可以直接获取运行结果,监控运行进度,常用于开发测试与调试;但缺点是,客户端存在于整个应用程序的生命周期,一旦客户端断开连接,应用程序的执行将关闭。
- Spark On YARN的cluster提交方式和Standalone的cluster提交方式,Driver都运行于服务端的ApplicationMaster角色中,客户端断开并不影响应用程序的执行,这种方式适用于生产环境。
Spark基础学习笔记02:Spark运行时架构相关推荐
- 2022年Spark基础学习笔记目录
一.Spark学习笔记 在私有云上创建与配置虚拟机 Spark基础学习笔记01:初步了解Spark Spark基础学习笔记02:Spark运行时架构 Spark基础学习笔记03:搭建Spark单机版环 ...
- 2022年Spark基础学习笔记
一.Spark学习笔记 在OpenStack私有云上创建与配置虚拟机 Spark基础学习笔记01:初步了解Spark Spark基础学习笔记02:Spark运行时架构 Spark基础学习笔记03:搭建 ...
- Spark基础学习笔记16:创建RDD
文章目录 零.本讲学习目标 一.RDD为何物 (一)RDD概念 (二)RDD示例 (三)RDD主要特征 二.做好准备工作 (一)准备文件 1.准备本地系统文件 2.准备HDFS系统文件 (二)启动Sp ...
- Spark基础学习笔记10:Scala集成开发环境
文章目录 零.本讲学习目标 一.搭建Scala的Eclipse开发环境 (一)安装Scala插件 (二)创建Scala项目 二.搭建Scala的IntelliJ IDEA开发环境 (一)启动IDEA ...
- Spark基础学习笔记04:搭建Spark伪分布式环境
文章目录 零.本讲学习目标 一.搭建伪分布式Hadoop (一)登录ied虚拟机 (二)配置免密登录 1.生成密钥对 2.将生成的公钥发送到本机(虚拟机ied) 3.验证虚拟机是否能免密登录本机 (三 ...
- Spark基础学习笔记23:DataFrame与Dataset
文章目录 零.本讲学习目标 一.Spark SQL (一)Spark SQL概述 (二)Spark SQL主要特点 1.将SQL查询与Spark应用程序无缝组合 2.Spark SQL以相同方式连接多 ...
- Spark基础学习笔记06:搭建Spark On YARN模式的集群
文章目录 零.本讲学习目标 一.在Spark Standalone模式的集群基础上修改配置 二.运行Spark应用程序 (一)启动Hadoop的HDFS和YARN (二)运行Spark应用程序 (三) ...
- Spark基础学习笔记05:搭建Spark Standalone模式的集群
文章目录 零.本讲学习目标 一.Spark集群拓扑 (一)集群拓扑 (二)集群角色分配 二.搭建集群 (一)私有云上创建三台虚拟机 (二)利用SecureCRT登录三台虚拟机 1.登录master虚拟 ...
- Spark基础学习笔记22:Spark RDD案例分析
文章目录 零.本讲学习目标 一.案例分析:Spark RDD实现单词计数 (一)案例概述 (二)实现步骤 1.新建Maven管理的Spark项目 2.添加Scala和Spark依赖 3.创建WordC ...
最新文章
- 掏空老底,值得推荐的10个学习神器,总有一个用得上!
- 崛起的超级智能:是否会是下一个“麦克卢汉式”预言?
- 生命游戏 c语言,c++生命游戏源码
- 字节腾讯阿里罕见联手:发布直播技术新标准,要让手机直播像电视一样丝滑...
- 路由异常的起源——如何影响最终用户?
- SQLITE中原子提交的实现
- eclipse ide for java ee developers与eclipse ide for java developers有什么区别
- delphi中的提前声明
- Git 中的对象模型和文件的详细视图 —— Git 学习笔记 13
- 【HDOJ】1597 find the nth digit
- c语言知5个学生的4门成绩,用C 语言数组解题 :已知5个学生的4门课的成绩,要求求出全部学生的门成绩并分别求出每门课的平均成绩...
- Atiitt 降低财政赤字风险性实施方案
- 如何免费将一个PDF拆分成多个文件?
- weak的创建与释放
- 【K8S】整体原理-K8S网络
- 详解C语言中的#define、#undef、#indef、#ifndef、#else、#endif,#if,#elif
- 哈啰出行高质量故障复盘法:“3+5+3”(附模板)
- 亿图图示--工业自动化模块--啤酒生产处理流程简图和热水冷凝处理架构
- Scoop包管理工具
- DirectD3D-光照和材质
热门文章
- 【华为云技术分享】降本增效的背后:华为云瑶光数字化经营实战
- 【云速建站】表单应用
- Python3 threading的多线程管理中的线程管理与锁
- JAVA 简单综合题目 小型公司职工对象
- 计算机学院迎新活动总结,大学迎新活动总结
- 【mysql基础知识】通过Navicat控制小数点位数,以及填充0后不显示的问题
- CSS的七种基本选择器及其权值
- ES6_proxy_note
- python typing optional_python类型检测最终指南--Typing模块的使用
- java行转列_Java后端面试标准:如何准备一场后端面试?