Spark 分布式弹性计算集(RDD)相关概念介绍

news2024/12/23 15:09:07

目录

一、概述

二、RDD的核心概念

2.1 Partition

2.2 Partitioner

2.3 RDD的依赖关系

2.4 Stage

2.5 PreferredLocation

2.6 CheckPoint

三、RDD的持久化

3.1 概述

3.2 概念

3.3 RDD持久化级别

3.3.1 MEMORY_ONLY

3.3.2 MEMORY_AND_DISK

3.3.3 MEMORY_ONLY_SER

3.3.4 OMEMORY_AND_DISK_SER

3.3.5 DISK_ONLY

3.3.6 MEMORY_ONLY2和MEMORY_AND_DISK2

3.3.7 OFF_HEAP

3.4 RDD 持久化原则

3.5 删除RDD持久化缓存


一、概述

RDD是 Spark 中最基本的数据抽象,代表一个不可变、可分区、元素可并行计算的集合。RDD具有自动容错、位置感知性调度和可伸缩等特点。RDD 允许用户在执行多个查询时显式地将数据集缓存在内存中,后续查询能够重用该数据集,这极大地提升了查询效率。

二、RDD的核心概念

2.1 Partition

RDD内部的数据集在逻辑上和物理上都被划分为多个分区(Partition)以提高运行的效率,分区数量决定了计算的并行度,每一个分区内的数据都在一个单独的任务中被执行,如果在计算过程中没有指定分区数,那么 Spark 会采用默认分区数量。默认分区数量为程序运行分配到的CPU核数。

2.2 Partitioner

Partitioner 是 RDD的分区函数。分区函数不但决定了 RDD本身的分区数量,也决定了其父 RDD Shuffle 输出时的分区数量。Spark 实现了基于 Hash(HashPartitioner)和基于范围(RangePartitioner)的两种分区函数。

注意:只有对于Key-Value的RDD才会有 Partitioner,而非 Key-Value的RDD的Parititioner 值是None。

2.3 RDD的依赖关系

RDD的每次转换都会生成一个新的 RDD,因此RDD之间会有前后依赖关系。当在计算过程中出现异常情况导致部分分区数据丢失时,Spark 可以通过依赖关系从父 RDD 中重新计算丢失的分区数据,而不需要对 RDD上的所有分区全部重新计算。RDD的依赖分为窄依赖和宽依赖。

  •  窄依赖:如果父 RDD的每个分区最多只能被子RDD的一个分区使用,则称之为窄依赖。
  • 宽依赖:如果父 RDD的每个分区都可以被子RDD的多个分区使用,则称之为宽依赖。

窄依赖的每个子RDD的Partition 的生成操作都是可以并行的,而宽依赖则需要所有父Partition Shuffle结果完成后再被执行。Spark的窄依赖和宽依赖如图所示:

2.4 Stage

Stage 是由一组 RDD组成的可进行优化的执行计划。如果 RDD的依赖关系为窄依赖,则可放在同一个 Stage 中运行;若 RDD的依赖关系为宽依赖,则要划分到不同Stage 中。这样,当Spark 执行作业时,会按照Stage 划分不同的RDD,生成一个完整的最优的执行计划,使每个 Stage 内的 RDD都尽可能在各个节点上并行地被执行,

如图所示:

阶段三 包含 阶段一和 阶段二,其中,阶段一为宽依赖,阶段二为窄依赖。

2.5 PreferredLocation

PreferredLocation 是一个用于存储每个 Partition 的优先位置的列表。对于每个 HDFS文件来说,这个列表保存的是每个 Partition 所在的块的位置也就是该HDFS文件的“划分点”。

2.6 CheckPoint

CheckPoint 是Spark 提供的一种基于快照的缓存机制。当需要计算的 RDD 过多时,为了避免任务执行失败后重新计算之前的 RDD,可以对 RDD 做快照(CheckPoint)处理,检查 RDD 是否被计算,并将结果持久化到磁盘或 HDFS 上。

此外Spark 提供另一种缓存机制 Cache,Cache 缓存数据由 Executor 管理,当Executor 消失时Cache 缓存的数据将被清除,而 CheckPoint将数据保存到永久性磁盘或HDFS,当计算出现运行错误时,Job可以从CheckPoint 点继续计算。

三、RDD的持久化

3.1 概述

Spark 可以跨节点在内存中持久化 RDD。当持久化 RDD时,每个节点都会在内存中缓存计算后的分区数据,当其他操作需要使用该 RDD 时,可以直接重用该缓存数据,这使得之后的 RDD 计算速度更快(通常超过10倍)。缓存是选代计算和交式计算的关键。

3.2 概念

应用程序可以使用 persist0或 cache0标记要缓存的 RDD,当调用操作(Action)执行计算时,计算结果将被缓存在节点的内存中。Spark 缓存具有容错性,如果 RDD的某个分区丢失,则该RDD将被自动重新计算。

每个持久化 RDD 都可以使用不同存储级别进行存储,Spark 允许将数据集存储在磁盘上或内存中。Spark 将需要缓存的数据序列化为 Java 对象(序列化可以节省磁盘或内存空间),然后跨节点复制到其他节点上,以便其他节点重用该数据。Spark 中缓存持久化级别是通过StorageLevel来设置的。具体代码如下

lineLengths.persist(storageLevel.MEMORY_ONLY());

3.3 RDD持久化级别

3.3.1 MEMORY_ONLY

使用未经过序列化的 Java 对象在内存中存储 RDD。当内存不够时,将不会进行持久化:当下次需要该 RDD 时,再从源头处重新计算。该策略是默认的持久化策略,当使用 cache()时,使用的是该持久化策略。

3.3.2 MEMORY_AND_DISK

使用未经过序列化的 Java 对象存储 RDD,优先尝试将RDD保存在内存中。如果内存不够,则会将 RDD写人磁盘文件;当下次需要该 RDD时从持久化的磁盘文件中读取该 RDD 即可。

3.3.3 MEMORY_ONLY_SER

MEMORY_ONLY_SER 的含义与 MEMORY_ONLY 类似唯一区别是MEMORY_ONLY_SER 会将 RDD中的数据进行序列化。在序列化过程中,RDD的每个 Partition 都将会被序列化成一个字节数组,这种方式更加节省内存,从而避免持久化的RDD占用过多内存导致JVM频繁GC。

3.3.4 OMEMORY_AND_DISK_SER

MEMORY_AND_DISK_SER 的含义与 MEMORY_AND_DISK类似。唯一区别是MEMORY_AND_DISK_SER会将RDD中的数据进行序列化。在序列化过程中,RDD的每个 Partition 都会被序列化成一个字节数组。这种方式更

加节省内存,从而避免持久化的 RDD占用过多内存导致频繁GC。

3.3.5 DISK_ONLY

使用未序列化的Java对象将 RDD全部写人磁盘文件。

3.3.6 MEMORY_ONLY2和MEMORY_AND_DISK2

对于上述任意一种持久化策略如果加上后缀 2,代表的是将每个持久化的数据都复制一份副本,并将副本保存到其他节点上。这种基于副本的持久化机制主要用于容错。假如某个节点挂掉,节点的内存或磁盘中的持久化数据丢失了,那么后续对 RDD 计算时还可以使用该数据在其他节点上的副本。如果没有副本,则只能将这些数据从头重新计算一遍。

3.3.7 OFF_HEAP

OFF_HEAP与MEMORY_ONLY_SER类似,OFF_HEAP将数据存储在堆外内存中。该参数需要Spark 启用堆外内存。

3.4 RDD 持久化原则

Spark 提供了丰富的存储级别,旨在通过不同存储级别的设置实现内存和CPU的最佳使用,具体开发中该如何选择持久化方案呢?以下为 Spark 官方提供的缓存持久化的选择流程。

  1. 如果RDD在默认存储级别(MEMORYONLY)下运行良好,则建议使用MEMORY_ONLY。该级别是CPU效率最高的类型,基于CPU快速计算可以使 RDD上的操作尽可能快地运行。
  2. 如果系统显示内存使用过高,则尝试使用MEMORY_ONLY_SER,并选择更快速的序列化库,以加快序列化时间和节省对象的存储空间。
  3. 如果要快速恢复故障,则建议使用副本存储级别。其他存储级别需要通过重新计算丢失的数据来保障缓存的完整性,而副本存储级别可以在其缓存对应的副本节点上直接执行任务,不用等待重新计算丢失的分区数据

3.5 删除RDD持久化缓存

Spark 会自动监视每个节点上的缓存使用情况,并以 LRU方式删除旧的数据分区如果想手动删除RDD,则可通过RDD.unpersist()方法完成。

今天Spark RDD的相关内容就分享到这里,可以关注Spark专栏《Spark》,后续不定期分享相关技术文章。如果帮助到大家,欢迎大家点赞+关注+收藏,有疑问也欢迎大家评论留言!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1906063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

份及恢复Sonarqube服务数据

基础数据: 源数据机ip:192.*.53 测试机ip:192.*.65 Sonarqube访问地址:http://192.*.65:9000/ 账户名:admin 密码:123456 数据库postgres: 版本:PostgreSQL 15.3 一、数据备份…

不同层数PCB如何选择合适板厚?

在回答这个问题前,我们首先需要了解什么是PCB厚度。 PCB厚度是指电路板完成后的厚度。 覆铜板的厚度:0.5、0.7、0.8、1.0、1.2、1.5、1.6、2.0、2.4、3.2和6.4毫米。 纸基覆铜板的标称厚度为 0.7 至 1.5 毫米。让我们开始了解更多细节。 标准 PCB 铜厚度…

2014-2022年审计师能力与专长

审计师在确保企业财务透明度和增强市场信心方面扮演着关键角色。以下是对审计师能力与专长数据的介绍: 数据简介 定义:审计师是独立、客观、合法地对组织进行财务状况、经营绩效和风险水平评估的专业人员。目的:通过收集和评估证据&#xf…

数据库开发:mysql基础一

文章目录 数据库开发Day15:MySQL基础(一)一、MySQL介绍与安装【1】MySQL介绍(5)启动MySQL服务(6)修改root登陆密码 二、SQL简介三、数据库操作四、数据表操作4.1、数据库数据类型4.2、创建数据表…

pnpm介绍

PNPM 是一个 JavaScript 包管理器,类似于 npm 和 Yarn。它的全称是 "Performant npm",主要设计目标是优化包的安装和管理过程,以提升速度和效率。PNPM 的主要特点包括: 符号链接(Symlink)&#x…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则(Interface Segregation Principle,ISP)在Vue 3中的应用 接口隔离原则(Interface Segregation Principle,ISP)规定,客户端不应该被迫依赖于它不使用的方法。 换句话说,…

【Python】已解决:SyntaxError: positional argument follows keyword argument

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:SyntaxError: positional argument follows keyword argument 一、分析问题背景 在Python编程中,当我们在调用函数时混合使用位置参数(p…

运维必会 掌握 Vim:从入门到精通

前言 Vim 是一个强大的文本编辑器,以其高效的编辑操作和强大的可定制性著称。无论你是编程新手还是经验丰富的开发者,Vim 都能帮助你提高工作效率。本文将带你深入了解 Vim,从基本操作到高级配置,逐步掌握。 一、基本操作 1. 模…

电力设备巡检管理系统

电力设备巡检管理系统是一种基于计算机技术和网络通信技术的智能化管理系统,旨在提高电力设备巡检的效率、准确性和安全性。以下是对该系统的详细介绍: 一、系统概述 电力设备巡检管理系统通过实时采集、传输和分析电力设备的数据,帮助电力企…

项目方案:社会视频资源整合接入汇聚系统解决方案(九)-视频监控汇聚应用案例

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…

Docassemble interview 未授权任意文件读取漏洞复现(CVE-2024-27292)

0x01 产品简介 Docassemble是一款强大的开源工具,主要用于自动化生成和定制复杂文档,特别是在法律文档处理领域表现出色。由Jonathan Pyle个人开发者开发,是一个免费的开源专家系统,用于指导访谈和文档组装。Docassemble基于Python编写,充分利用了Python的灵活性和广泛的…

【无标题】地平线2西之绝境/Horizon Forbidden West™ Complete Edition(更新:V1.3.57)

游戏介绍 与埃洛伊同行,在危险壮美的边疆之地揭开种种未知的神秘威胁。此完整版可完整享受广受好评的《地平线 西之绝境™》内容和额外内容,包括在主线游戏后展开的后续故事“炙炎海岸”。 重返《地平线》中遥远未来的后末日世界,探索远方的土…

解密智慧校园基础数据的学年管理功能

在智慧校园平台中,学年管理模块构成了教育活动有序运行的基石,它精心设计来适应多样化的学术日程,确保学校的各项事务都能在清晰规划的学年框架内顺利推进。这一核心功能不仅关乎时间的界定,更深层次地融入了教育管理的每一个细微…

记录在Windows上安装Docker

在Windows上安装Docker时,可以选择使用不同的后端。 其中两个常见的选择是:WSL 2(Windows Subsystem for Linux 2)和 Hyper-V 后端。此外,还可以选择使用Windows容器。 三者的区别了解即可,推荐用WSL 2&…

一、redis-万字长文读懂redis

高性能分布式缓存Redis `第一篇章`1.1缓存发展史&缓存分类1.1.1 大型网站中缓存的使用带来的问题1.1.2 常见缓存的分类及对比与memcache对比1.2 数据类型选择&应用场景1.2.1 string1.2.2 hash1.2.3 链表1.2.4 set1.2.5 sortedset有序集合类型1.2.6 总结1.3 Redis高级应…

AI集成工具平台一站式体验,零门槛使用国内外主流大模型

目录 0 写在前面1 AI艺术大师1.1 绘画制图1.2 智能作曲 2 AI科研助理2.1 学术搜索2.2 自动代码 3 AI智能对话3.1 聊天机器人3.2 模型竞技场 4 特别福利 0 写在前面 人工智能大模型浪潮滚滚,正推动着千行百业的数智化进程。随着技术演进,2024年被视为是大…

『C++成长记』string模拟实现

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ ​ 目录 一、存储结构 二、默认成员函数 📒2.1构造函数 📒2.…

C语言调试技巧

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.bug 是什么2.debug 是什么3.两种模式的区别4.IDE 调试介绍4.1.模…

满足信创环境运行的国产FTP服务器是什么样的?

2018 年以来,受“华为、中兴事件”影响,我国科技尤其是上游核心技术受制于人的现状对我 国经济发展提出了严峻考验。在全球产业从工业经济向数字经济升级的关键时期,中国明确 “数字中国”建设战略, 抢占数字经济产业链制高点。 在…

RK3588编译rkmpp,拉取海康威视网络摄像头264码流并运行yolo

硬件:EVB评估版 SOC:Rockchip RK3588 背景: 由于项目需要,需要拉取264码流,并通过将yolov5s.pt将模型转化为rknn模型,获取模型分析结果。取流可以通过软件解码或者硬件解码,硬件解码速度更快&…