Spark运行架构

发布于:2025-04-11 ⋅ 阅读:(39) ⋅ 点赞:(0)

 

运行架构

 

Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构。

它展示了一个 Spark 执行时的基本结构。图形中的 Driver 表示 master,负责管理整个集群中的作业任务调度。图形中的 Executor 则是 slave,负责实际执行任务

Driver、Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作。

   

Driver 在 Spark主要负责

将用户程序转化为作业(job)

在 Executor 之间调度任务(task)

跟踪 Executor 的执行情况

通过 UI 展示查询运行情况

Driver 就是驱使整个应用运行起来的程序,也称之为Driver 类。

Spark Executor 是集群中工作节点(Worker)中的一个 JVM 进程,负责在 Spark 作业中运行具体任务(Task),任务彼此之间相互独立。会将出错节点上的任务调度到其他 Executor 节点上继续运行。

Executor核心:

负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程

它们通过自身的块管理器(Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。可以在运行时充分利用缓存数据加速运算。

Spark 集群的独立部署环境中

两个核心组件:Master 是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责。Worker 运行在集群中的一台服务器上,由 Master 分配资源对数据进行并行的处理和计算

ResourceManager(资源)和 Driver(计算)之间的解耦合靠的就是ApplicationMaster。

核心:Spark Executor 是集群中运行在工作节点(Worker)中的一个 JVM 进程,是整个集群中的专门用于计算的节点。Executor 的内存大小和使用的虚拟 CPU 核(Core)数量。

并行度(Parallelism)

整个集群并行执行任务的数量称之为并行度。

有向无环图(DAG)

一类就是Hadoop 所承载的 MapReduce,它将计算分为两个阶段,分别为 Map 阶段 和 Reduce 阶段。

DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。

提交流程

Spark 引用部署到Yarn 环境中会更多一些,所以这里提到的提交流程是基于 Yarn 环境的。

第四节 RDD相关概念

三大数据结构:

RDD : 弹性分布式数据集

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

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

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是 Spark 中最基本的数据处理模型。弹性的、不可变、可分区、里面的元素可并行计算的集合。

弹存

储的弹性:内存与磁盘的自动切换;

容错的弹性:数据丢失可以自动恢复;

计算的弹性:计算出错重试机制;

分片的弹性:可根据需要重新分片。

 

分布式:数据存储在大数据集群不同节点上

数据集:RDD 封装了计算逻辑,并不保存数据

数据抽象:RDD 是一个抽象类,需要子类具体实现

不可变:RDD 封装了计算逻辑,是不可以改变的,想要改变,只能产生新的 RDD,在新的 RDD 里面封装计算逻辑

可分区、并行计算

核心属性

分区列表

RDD 数据结构中存在分区列表,用于执行任务时并行计算,是实现分布式计算的重要属性。

分区计算函数

Spark 在计算时,是使用分区函数对每一个分区进行计算。

RDD 之间的依赖关系

RDD 是计算模型的封装,当需求中需要将多个计算模型进行组合时,就需要将多个 RDD 建立依赖关系。

分区器(可选)

当数据为 K-V 类型数据时,可以通过设定分区器自定义数据的分区。

首选位置(可选)

计算数据时,可以根据计算节点的状态选择不同的节点位置进行计算。

执行原理

将计算资源和计算模型进行协调和整合

RDD的工作原理如下:

启动 Yarn 集群环境

Spark 通过申请资源创建调度节点和计算节点

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

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

主要用于将逻辑进行封装,并生成 Task 发送给Executor 节点执行计算。

RDD 序列化

  1. 闭包检查
  1. 序列化方法和属性
  1. Kryo 序列化框架

使用 Kryo 序列化,也要继承 Serializable 接口

RDD 依赖关系

RDD 血缘关系:信息来重新运算和恢复丢失的数据分区

RDD 依赖关系:两个相邻 RDD 之间的关系

RDD 窄依赖:比喻为独生子女

RDD 宽依赖:宽依赖我们形象的比喻为多生

RDD 阶段划分:DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环

RDD 任务划分:Application:初始化一个 SparkContext 即生成一个 Application;

Job:一个 Action 算子就会生成一个 Job;

Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1;

Task:一个 Stage 阶段中,最后一个 RDD 的分区个数就是 Task 的个数。

注意:Application->Job->Stage->Task 每一层都是 1 对 n 的关系。

RDD 持久化

RDD Cache 缓存

RDD CheckPoint 检查点

RDD 进行 checkpoint 操作并不会马上被执行,必须执行 Action 操作才能触发。

缓存和检查点区别

Cache 缓存只是将数据保存起来,不切断血缘依赖。Checkpoint 检查点切断血缘依赖

Cache 缓存的数据通常存储在磁盘、内存等地方,可靠性低。

checkpoint()的 RDD 使用 Cache 缓存,

RDD 分区器

Key-Value 类型的 RDD 才有分区器,非 Key-Value 类型的 RDD 分区的值是 None

每个 RDD 的分区 ID 范围:0 ~ (numPartitions - 1),决定这个值是属于那个分区的。

Hash 分区:对于给定的 key,计算其 hashCode,并除以分区个数取余。

Range 分区:将一定范围内的数据映射到一个分区中,尽量保证每个分区数据均匀,而且分区间有序

RDD 文件读取与保存’

文件格式分为:text 文件、csv 文件、sequence 文件以及 Object 文件;

文件系统分为:本地文件系统、HDFS、HBASE 以及数据库。

text 文件

sequence 文件

object 对象文件

 

 


网站公告

今日签到

点亮在社区的每一天
去签到