Spark系列一之系统架构

本文详细介绍了Spark的运行架构,包括端口号、核心组件如Driver、Executor、Master和Worker,以及ApplicationMaster的角色。重点阐述了Spark的并行度、有向无环图(DAG)的概念,并对比了YarnClient和YarnCluster两种提交模式。同时,深入探讨了RDD作为Spark核心编程模型的特性及其执行原理。
摘要由CSDN通过智能技术生成

目录

端口号

Spark 运行架构

核心组件

Driver

Executor

Master & Worker

 ApplicationMaster

核心概念

Executor 与 Core

并行度(Parallelism)

有向无环图(DAG)

提交流程

Yarn Client 模式

Yarn Cluster 模式

Spark 核心编程

RDD

执行原理


端口号

➢ Spark 查看当前 Spark-shell 运行任务情况端口号: 4040 (计算)
➢ Spark Master 内部通信服务端口号: 7077
➢ Standalone 模式下, Spark Master Web 端口号: 8080 (资源)
➢ Spark 历史服务器端口号: 18080
➢ Hadoop YARN 任务运行情况查看端口号: 8088

Spark 运行架构

Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。
如下图所示,它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master
负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave ,负责实际执行任务。

核心组件

Driver

Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。
Driver Spark 作业执行时主要负责:
➢ 将用户程序转化为作业(job
➢ 在 Executor 之间调度任务 (task)
➢ 跟踪 Executor 的执行情况
➢ 通过 UI 展示查询运行情况
实际上,我们无法准确地描述 Driver 的定义,因为在整个的编程过程中没有看到任何有关 Driver 的字眼。所以简单理解,所谓的 Driver 就是驱使整个应用运行起来的程序,也称之为 Driver 类。

Executor

Spark Executor 是集群中工作节点( Worker )中的一个 JVM 进程,负责在 Spark 作业 中运行具体任务(Task),任务彼此之间相互独立。Spark 应用启动时, Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃,Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。 
Executor 有两个核心功能:
➢ 负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程
➢ 它们通过自身的块管理器(Block Manager )为用户程序中要求缓存的 RDD 提供内存 式存储。RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存 数据加速运算。

Master & Worker

Spark 集群的独立部署环境中,不需要依赖其他的资源调度框架,自身就实现了资源调 度的功能,所以环境中还有其他两个核心组件:Master Worker ,这里的 Master 是一个进 程,主要负责资源的调度和分配,并进行集群的监控等职责,类似于 Yarn 环境中的 RM, 而 Worker 呢,也是进程,一个 Worker 运行在集群中的一台服务器上,由 Master 分配资源对 数据进行并行的处理和计算,类似于 Yarn 环境中 NM

 ApplicationMaster

Hadoop 用户向 YARN 集群提交应用程序时 , 提交程序中应该包含 ApplicationMaster ,用 于向资源调度器申请执行任务的资源容器 Container ,运行用户自己的程序任务 job ,监控整 个任务的执行,跟踪整个任务的状态,处理任务失败等异常情况。
说的简单点就是, ResourceManager (资源)和 Driver (计算)之间的解耦合靠的就是 ApplicationMaster。

核心概念

Executor Core

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

并行度(Parallelism

在分布式计算框架中一般都是多个任务同时执行,由于任务分布在不同的计算节点进行
计算,所以能够真正地实现多任务并行执行,记住,这里是并行,而不是并发。这里我们将
整个集群并行执行任务的数量称之为 并行度 。那么一个作业到底并行度是多少呢?这个取决
于框架的默认配置。应用程序也可以在运行过程中动态修改。

有向无环图(DAG

 

提交流程

 

 Spark 应用程序提交到 Yarn 环境中执行的时候,一般会有两种部署执行的方式:Client

Cluster 两种模式主要区别在于: Driver 程序的运行节点位置。

Yarn Client 模式

Client 模式将用于监控和调度的 Driver 模块在客户端执行,而不是在 Yarn 中,所以一
般用于测试。
➢ Driver 在任务提交的本地机器上运行
➢ Driver 启动后会和 ResourceManager 通讯申请启动 ApplicationMaster
➢ ResourceManager 分配 container ,在合适的 NodeManager 上启动 ApplicationMaster ,负
责向 ResourceManager 申请 Executor 内存
➢ ResourceManager 接到 ApplicationMaster 的资源申请后会分配 container ,然后ApplicationMaster 在资源分配指定的 NodeManager 上启动 Executor 进程。

Yarn Cluster 模式

➢ 在 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 上执行。

Spark 核心编程

 ➢ RDD : 弹性分布式数据集

➢ 累加器:分布式共享只写变量

➢ 广播变量:分布式共享 只读 变量

RDD

RDD Resilient Distributed Dataset )叫做弹性分布式数据集,是 Spark 中最基本的 数据 处理模型 。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行 计算的集合。
➢ 弹性
      存储的弹性:内存与磁盘的自动切换;
      容错的弹性:数据丢失可以自动恢复;
      计算的弹性:计算出错重试机制;
      分片的弹性:可根据需要重新分片。
➢ 分布式:数据存储在大数据集群不同节点上
➢ 数据集:RDD 封装了计算逻辑,并不保存数据
➢ 数据抽象:RDD 是一个抽象类,需要子类具体实现
➢ 不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD ,在
新的 RDD 里面封装计算逻辑
➢ 可分区、并行计算

执行原理

从计算的角度来讲,数据处理过程中需要计算资源(内存 & CPU )和计算模型(逻辑)。
执行时,需要将计算资源和计算模型进行协调和整合。
Spark 框架在执行时,先申请资源,然后将应用程序的数据处理逻辑分解成一个一个的 计算任务。然后将任务发到已经分配资源的计算节点上, 按照指定的计算模型进行数据计算。最后得到计算结果。
RDD Spark 框架中用于数据处理的核心模型,接下来我们看看,在 Yarn 环境中, RDD
的工作原理 :
1) 启动 Yarn 集群环境
2) Spark 通过申请资源创建调度节点和计算节点

 

 

3) Spark 框架根据需求将计算逻辑根据分区划分成不同的任务

4) 调度节点将任务根据计算节点状态发送到对应的计算节点进行计算

 

从以上流程可以看出 RDD 在整个流程中主要用于将逻辑进行封装,并生成 Task 发送给 Executor 节点执行计算,接下来我们就一起看看 Spark 框架中 RDD 是具体是如何进行数据 处理的。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值