Spark Core ---- RDD持久化

news2024/11/27 9:46:22

RDD的数据是过程数据

RDD之间进行相互迭代计算(Transformation的转换),当执行开启后,新RDD的生成,代表老RDD的消失
RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了

  • 这个特性可以最大化的利用资源,老旧RDD没用了,就从内存中清理,给后续的计算腾出空间

在这里插入图片描述
如上图:
rdd3被使用两次,第一次使用之后rdd3就不存在了。
第二次使用的时候,只能基于RDD的血缘关系,从RDD1重新执行,构建出来rdd3,供rdd5使用。

这样执行,有点浪费,rdd1,rdd2,rdd3,会构建两次。
一个RDD被多次使用,这样我们可以使用持久化技术。
持久化技术:

  • RDD缓存
  • RDD CheckPoint

RDD缓存

方案:针对之前的代码,我们将rdd3保留下来,这样性能可以得到提升

RDD的缓存技术:Spark提供了缓存API,可以让我们通过调用API,将指定的RDD数据保留在内存或者硬盘上

# RDD3 被两次使用,可以加入缓存进行优化
rdd3.cache()     # 缓存到内存中
rdd3.persist(StorageLevel.MEMORY_ONLY)     # 仅内存缓存。 cache() 底层依靠这个使用,上面是一个快捷调用而已
rdd3.persist(StorageLevel.MEMORY_ONLY_2)     # 仅内存缓存,2个副本

rdd3.persist(StorageLevel.DISK_ONLY)   # 仅缓存硬盘上 
rdd3.persist(StorageLevel.DISK_ONLY_2)   # 仅缓存硬盘上,2个副本
rdd3.persist(StorageLevel.DISK_ONLY_3)   # 仅缓存硬盘上,3个副本

rdd3.persist(StorageLevel.MEMORY_AND_DISK)   # 先放内存,不够放硬盘
rdd3.persist(StorageLevel.MEMORY_AND_DISK_2)   # 先放内存,不够放硬盘,2个副本

rdd3.persist(StorageLevel.OFF_HEAP)   # 堆外内存(系统内存)

# 如上API,自行选择使用即可
# 一般建议使用  rdd3.persist(StorageLevel.MEMORY_AND_DISK)
# 如果内存比较小的集群,建议使用rdd3.persist(StorageLevel.DISK_ONLY) ,或者就别用缓存了,用CheckPoint

# 主动清理缓存 API
rdd.unpersist()

缓存特点1:
当你使用缓存时,不管是写在内存还是硬盘中。每个Executor对应的机器上都会缓存这份数据。
这个缓存的rdd3,在逻辑上是一个整体,物理上分为三块。和hadoop的分散存储是一样的。

缓存特点2:
但是严格来说,设计上是认为缓存时不安全的。比如断电,计算任务内存不足,把缓存清理给计算让路。硬盘中因为硬盘物理损坏也可能丢失。
缓存如果丢失,就只有重新计算。所以被缓存的RDD必须保留前置血缘关系,这是缓存RDD的特点。

RDD CheckPoint

CheckPoint技术,也是将RDD的数据保存起来,但是它是仅支持硬盘存储
并且:它在设计上认为是最安全的,不保留血缘关系

缓存是将数据保存在内存或者本地硬盘中。
CheckPoint是将数据保存在HDFS中,将各个分区的数据进行收集,统一进行保存。而缓存是分散存储。

缓存和CheckPoint对比

  • CheckPoint不管分区数量多少,风险是一样的。缓存分区越多,风险越高
  • CheckPoint支持写入HDFS。缓存不行,HDFS是高可靠存储,CheckPoint被认为是安全的
  • CheckPoint不支持内存,缓存可以,缓存如果写内存,性能比CheckPoint要好一些
  • CheckPoint因为设计认为是最安全的,所以不保留血缘关系,而缓存因为设计上认为不安全,所以保留血缘关系

在两个选择使用方面,数据量不大的使用缓存,数据量大的使用CheckPoint

# 设置CheckPoint第一件事情,选择CP的保存路径
# 如果是Local模式,可以支持本地文件系统,如果在集权运行,千万要用HDFS
sc.setCheckpointDir("hdfs://node1:8020/output/ckp")
# 用的时候,直接调用 checkpoint算子即可
rdd.checkpoint()

总结:

1、Cache和CheckPoint区别
Cache是轻量化保存RDD数据,可存储在内存和硬盘,是分散存储,设计上数据是不安全的(保留RDD血缘关系)
CheckPoint是重量级保存RDD数据,是集中存储,只能存储在HDFS上,设计上是安全的(不保留血缘关系)

2、Cache和CheckPoint的性能对比
Cache性能更好,因为是分散存储,多个Executor并行执行,效率高,但是风险大。可以保存到内存中(比较占内存),更快。
CheckPoint比较慢,因为是集中存储,设计到网络IO,但是存储到HDFS上更加安全。

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

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

相关文章

【数据结构和算法】实现带头双向循环链表(最复杂的链表)

前文,我们实现了认识了链表这一结构,并实现了无头单向非循环链表,接下来我们实现另一种常用的链表结构,带头双向循环链表。如有仍不了解单向链表的,请看这一篇文章(7条消息) 【数据结构和算法】认识线性表中的链表&…

Spring Boot之SpringSecurity学习

文章目录一 SpringSecurity简介二 实战演示0. 环境 介绍1. 新建一个初始的springboot项目2. 导入thymeleaf依赖3. 导入静态资源4. 编写controller跳转5. 认证和授权6. 权限控制和注销7. 记住登录8. 定制登录页面三 完整代码3.1 pom配置文件3.2 RouterController.java3.3 Securi…

那些面试官口中常常提到b树(MySQL索引底层数据结构)

各种常见树1.树的基本概念2.二叉树3.b树4.b树5.b树与b树的对比5.MySQL索引底层数据结构1.树的基本概念 树的特点:有一个树根,树根上又有很多枝干,枝干上又有很多树枝,树枝上又有很多叶子 树最为一种数据结构也有相似特点 树是一个…

【计算机网络(考研版)】第二站:物理层(一)

前言 如下图所示,这是我们之前所说的数据流动示意图 我们将按照从下向上的结构进行学习。这一讲学习第一层物理层。物理层关注在一条通信信道上传输原始比特,即无论面对什么样的传输介质(有线或者无线)都可以传输比特流,物理层的作用正是要尽…

Python3 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户…

Node require 正解

require 实现原理 流程概述 步骤1:尝试执行代码require("./1"). 开始调用方法require.步骤2:此时会得到filename,根据filename 会判断缓存中是否已经加载模块,如果加载完毕直接返回,反之继续执行步骤3&…

JavaScript 的数据类型

JavaScript 的数据类型 基本数据类型&#xff08;值类型&#xff09; Number&#xff08;包含小数、整数、负数、科学计数法&#xff09; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"…

【Linux】六、Linux 基础IO(四)|动态库和静态库

目录 十一、动态库和静态库 11.1 动态库和静态库定义 11.2 动静态库的基本原理 11.3 静态库的打包与使用 11.3.1 静态库的打包 11.3.2 静态库的使用 11.4 动态库的打包与使用 11.4.1 动态库的打包 11.4.2 动态库的使用 11.5 动态库的加载 十一、动态库和静态库 11.1…

CB2-2CARD的openSUSE安装NAS环境配置

CB2-2CARD的openSUSE安装&NAS环境配置1. 简介2. 规格3. 系统安装3.1 Linux/Unix稳定镜像3.2 基础功能更新&安装3.2.1 更新源3.2.2 升级系统3.2.3 基础功能安装3.3 OpenSUSE系统情况3.3.1 源操作命令3.3.2 源镜像4. 需求 & 配置4.1 MiniDLNAStep 1&#xff1a;安装M…

Day870.全局锁和表锁 -MySQL实战

全局锁和表锁 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于全局锁和表锁的内容。 数据库锁设计的初衷是处理并发问题。 作为多用户共享的资源&#xff0c;当出现并发访问的时候&#xff0c;数据库需要合理地控制资源的访问规则。锁就是用来实现这些访问规则的重…

数据结构 | C++ | 并查集原理讲解与模拟实现 | 并查集的相关习题

文章目录前言并查集原理并查集的模拟实现leetcode练习省份数量等式方程的可满足性前言 并查集通常会作为高阶数据结构的一个子结构使用&#xff0c;虽然原理不是很难&#xff0c;但其思想值得我们好好学习 并查集原理 并查集是一种树形结构&#xff0c;其保存了多个集合&…

【Maven】多环境配置与应用

目录 1. 多环境配置作用 问题导入 2. 多环境配置步骤 2.1 定义多环境 2.2 使用多环境&#xff08;构建过程&#xff09; 3. 跳过测试&#xff08;了解&#xff09; 问题导入 3.1 应用场景 3.2 跳过测试命令 3.3 细粒度控制跳过测试 1. 多环境配置作用 问题导入 多…

LeetCode 2331. 计算布尔二叉树的值

给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a; 叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示 True 。 非叶子节点 要么值为 2 要么值为 3 &#xff0c;其中 2 表示逻辑或 OR &#xff0c;3 表示逻辑与 AND 。 计算…

【推荐系统】User-Item CF:NGCF

&#x1f4a1; 本次解读的文章是 2019 年发表于 SIGIR 的一篇基于图卷积神经网络的用户物品协同过滤推荐算法论文&#xff0c; 论文将用户-物品交互信息建模为二分图&#xff0c;提出了一个基于二分图的推荐框架 Neural Graph Collaborative Filtering&#xff08;NGCF&#xf…

基于nodejs+vue的社区问答网站与设计

目 录 摘要 I Abstract II 1 绪论 1 1.1 选题背景 1 1.2 选题意义 1 1.3 研究内容 2 2 相关技术介绍 3 3 系统分析 5 3.1可行性分析 5 3.2 需求分析 5 3.2.1非功能性需求 5 3.2.2功能需求 6 3.3 系统用例 6 3.3.1 会员功能需求 6 …

【C++修炼之路】13. priority_queue及仿函数

每一个不曾起舞的日子都是对生命的辜负 stack&&queue一 . priority_queue介绍二. priority_queue的使用三. 仿函数3.1 仿函数的介绍3.2 仿函数的好处四.priority_queue模拟实现五.仿函数之日期比较一 . priority_queue介绍 priority_queue文档介绍 优先队列是一种容器…

机器学习实战(第二版)读书笔记(2)—— LSTMGRU

刚接触深度学习半年的时间&#xff0c;这期间有专门去学习LSTM &#xff0c;这几天读机器学习实战这本书的时候又遇到了&#xff0c;感觉写的挺好的&#xff0c;所以准备结合本书写一下总结方便日后回顾。如有错误&#xff0c;欢迎批评指正。 一、LSTM 优势&#xff1a;可在一…

ApiSix 开启SkyWalking插件,实现链路信息追踪

ApiSix 开启SkyWalking插件&#xff0c;实现链路信息追踪1 ApiSix开启SkyWalking插件1.1 修改config.yml配置文件1.2 在路由中开启SkyWalking插件2 创建两个SpringBoot服务&#xff0c;接入SkyWalking2.1 下载skywalking agent2.2 创建服务2.3 测试SkyWalking1 ApiSix开启SkyWa…

【链表】反转链表

BM1反转链表 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0\leq n\leq10000≤n≤1000 要求&#xff1a;空间复杂度…

飞行员兄弟( 二进制枚举) --《算法竞赛进阶指南》

题目如下&#xff1a; 输入样例&#xff1a; --- ---- ---- ---输出样例&#xff1a; 6 1 1 1 3 1 4 4 1 4 3 4 4思路 or 题解&#xff1a; 数据量很小可以直接进行 搜索 在这里我使用 二进制枚举 的方法去寻找答案 时间复杂度&#xff1a;O(2n)O(2^n)O(2n) 我们二进制枚举…