Spark(11):RDD持久化

news2024/11/24 17:37:52

目录

0. 相关文章链接

1. RDD Cache 缓存

2. RDD CheckPoint 检查点

3. 缓存和检查点区别


0. 相关文章链接

 Spark文章汇总 

1. RDD Cache 缓存

        RDD 通过 Cache 或者 Persist 方法将前面的计算结果缓存,默认情况下会把数据以缓存在 JVM 的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用。 

// cache操作会增加血缘关系,不改变原有的血缘关系 
println(wordToOneRdd.toDebugString) 
 
// 数据缓存。 
wordToOneRdd.cache() 
 
// 可以更改存储级别 
//mapRdd.persist(StorageLevel.MEMORY_AND_DISK_2) 

存储级别:

object StorageLevel {
    val NONE = new StorageLevel(false, false, false, false)
    val DISK_ONLY = new StorageLevel(true, false, false, false)
    val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)
    val MEMORY_ONLY = new StorageLevel(false, true, false, true)
    val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)
    val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
    val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)
    val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
    val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)
    val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
    val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)
    val OFF_HEAP = new StorageLevel(true, true, true, false, 1)
}

        缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD 的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于 RDD 的一系列转换,丢失的数据会被重算,由于 RDD 的各个 Partition 是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。

        Spark 会自动对一些 Shuffle 操作的中间数据做持久化操作(比如:reduceByKey)。这样做的目的是为了当一个节点 Shuffle 失败了避免重新计算整个输入。但是,在实际使用的时候,如果想重用数据,仍然建议调用 persist 或 cache。 

2. RDD CheckPoint 检查点

        所谓的检查点其实就是通过将 RDD 中间结果写入磁盘由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果检查点之后有节点出现问题,可以从检查点开始重做血缘,减少了开销。 

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

// 设置检查点路径
sc.setCheckpointDir("./checkpoint1")

// 创建一个RDD,读取指定位置文件:hello atguigu atguigu
val lineRdd: RDD[String] = sc.textFile("input/1.txt")

// 业务逻辑
val wordRdd: RDD[String] = lineRdd.flatMap((line: String) => line.split(" "))
val wordToOneRdd: RDD[(String, Long)] = wordRdd
    .map {
        word: String => {
            (word, System.currentTimeMillis())
        }
    }

// 增加缓存,避免再重新跑一个job做checkpoint
wordToOneRdd.cache()
// 数据检查点:针对wordToOneRdd做检查点计算
wordToOneRdd.checkpoint()

// 触发执行逻辑
wordToOneRdd.collect().foreach(println)

3. 缓存和检查点区别

  • Cache 缓存只是将数据保存起来,不切断血缘依赖。Checkpoint 检查点切断血缘依赖。
  • Cache 缓存的数据通常存储在磁盘、内存等地方,可靠性低。Checkpoint 的数据通常存储在 HDFS 等容错、高可用的文件系统,可靠性高。 
  • 建议对 checkpoint()的 RDD 使用 Cache 缓存,这样 checkpoint 的 job 只需从 Cache 缓存中读取数据即可,否则需要再从头计算一次 RDD。 

注:其他Spark相关系列文章链接由此进 ->  Spark文章汇总 


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

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

相关文章

关于Spring Boot的若干个重要问题

Spring Boot 1.什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化maven配置 自动配置spring添加对应功能starter…

nodejs-pm2管理js并发/自动重启/恢复等

目录 一、nodejs安装二、启动运行js三、实用功能1-pm2对进程名起别名四、实用功能2-pm2启动多个进程五、实用功能3-pm2内存限制自动重启六、实用功能4-服务器宕机前保存记录恢复进程 一、nodejs安装 nodejs安装使用nohup后台启动项目,倒是解决了控制台问题&#xf…

用Python从文件中读取学生成绩,并计算最高分/最低分/平均分

目录标题 前言环境使用:涉及知识点代码展示尾语 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 今天咱们试试用Python从文件中读取学生成绩,并计算最高分/最低分/平均分。 环境使用: Python 3.8 解释器 Pycharm 编辑器 涉及知识点 文件读写 基础语法 字…

QQ邮箱第三方POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务授权码

参考QQ邮箱: 什么是授权码,它又是如何设置? 设置入口: 选择 账户 下拉找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务就好了。我这边已经开通,开通流程挺简单的,手机号绑定然后输入验证码就好了。

华安联大:基于北斗RTK+蓝牙AOA、UWB定位技术为智慧港口提供多元化解决方案

深圳华安联大创新科技有限公司的商场室内导航系统方案,解决传统购物中心用户体验差的缺点,可实现3大类功能应用: (1)实现顾客在商场内自主导航,室内位置实时分享,目的地商铺自主导航,路径规划等功能: (2)停车场反向寻…

CISA在三星和D-Link设备中发现8个被积极利用的漏洞

美国网络安全和基础设施安全局(CISA)根据已有的证据,将8个被积极利用的漏洞列入已知的漏洞(KEV)目录中。 这8个被积极利用的漏洞包括影响三星智能手机的六个漏洞和影响D-Link设备的两个漏洞。以下是这八个漏洞&#x…

Java jsp 实战

1.JSP执行过程(原理) 步骤1:翻译(jsp-->java) 步骤2:编译(java-->class文件) 步骤3:执行(执行class(字节码)文件) 2.JSP实战 步骤1&…

UE4中创建的瞄准偏移或者混合空间无法拖入动画

UE4系列文章目录 文章目录 UE4系列文章目录前言一、解决办法 前言 UE4 AimOffset(瞄准偏移)动画融合时,AimOffse动画拖入不了融合框的解决办法,你会发现动画无法拖入到融合框,ue4编辑器提示“Invalid Additive animation Type”,…

Android Studio最新好用的插件----Gson转Java实体类/Kotlin Data

1.Java 安装好插件之后,把Gson/Json数据复制一下,eg: { "Chrome": "UA-66061856-6", "ChromePro": "UA-66061856-9", "Opera": "UA-66061856-7", "Edge": "UA-66061856-8&q…

K8s 为什么要弃用 Docker

K8s 为什么要弃用 Docker 最近在学习容器技术的过程中,看到有关于Kubernetes“弃用 Docker”的事情,担心现在学 Docker 是否还有价值,是否现在就应该切换到 containerd 或者是其他 runtime。 随着深入了解,这些疑虑的确是有些道理…

python实现语音识别(讯飞开放平台)

文章目录 讯飞平台使用python实现讯飞接口的语音识别第一步:导入需要的依赖库第二步:初始化讯飞接口对象第三步:收到websocket建立连接后的处理函数第四步:收到websocket消息的处理函数第五步:整合运行各函数 讯飞平台…

linux内核TCP源码浅析

目录 数据接收流程驱动层网络层ip_local_deliverip_local_deliver_finish 传输层tcp_v4_rcvtcp_v4_do_rcvtcp_rcv_establishedtcp_recvmsg linux内核源码下载:https://cdn.kernel.org/pub/linux/kernel/ 我下载的是:linux-5.11.1.tar.gz 数据接收流程 …

服务器数据库被360后缀勒索病毒攻击怎么办?360勒索病毒的加密形式

近日,我们收到很多企业的求助,企业服务器内的多种数据库被.360后缀的勒索病毒加密,导致企业许多工作无法正常运转,也给企业带来了严重的经济损失。360后缀勒索病毒是一种恶意软件,它属于BeijingCrypt勒索病毒家族&…

Server - 通过 AutoSSH 建立服务器端口转发用于访问网页

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131536508 AutoSSH 是一款用于创建和维护持久的SSH隧道的工具,可以自动检测和恢复断开的连接,从而保证隧道的稳定性。Auto…

VS2022集成代码规范组件StyleCop.Analyzers应用于解决方案

背景 项目团队刚刚组件,每个人的代码编写习惯都不一样,希望用一款代码规范的检查插件来规范团队成员编写代码的习惯,在网上找了一遍之后,感觉StyleCop.Analyzers比较适用。 集成方法 1.NuGet搜索StyleCop.Analyzers进行安装到指…

docker-compose启动redis:Can‘t open the append-only file: permission deined

一、问题 docker-compose启动redis:Can‘t open the append-only file: permission deined //1-进入docker文件夹下 cd /docker//2-使用docker-comopse启动Mysql和redis docker-compose up -d mysql redisCan‘t open the append-only file: permission deined这里…

教你实现图片的点击缩放和移动

教你实现图片的点击缩放和移动 为了方案的通用性&#xff0c;这回使用基本的htmljs进行操作&#xff0c;vue和react使用方法类似&#xff0c;几乎不需要进行什么语法转换操作&#xff0c;注意一下点击事件在自己框架里的写法即可 随便来写一个简单的页面&#xff1a; <ht…

如何在Windows 10和Linux上安装nvm

在Windows 10上安装nvm&#xff1a; 访问nvm的GitHub页面&#xff08;https://github.com/coreybutler/nvm-windows/releases &#xff09;&#xff0c;下载最新的安装程序。运行下载的安装程序&#xff0c;按照提示进行安装。选择合适的安装路径。完成安装后&#xff0c;打开…

你对未来Android 车载开发市场怎么看?

前阵子看到一个新闻说&#xff1a;“中国进口车销量创10年来新低 “产业变革效应”正在显现”&#xff0c;于是我的好奇心让我点开看了一下 原来是国产的新能源汽车的崛起&#xff0c;受到了不少国内外客户的欢迎&#xff0c;使得订单量暴涨&#xff0c;出口的数量反超进口车数…

【python】jupyter notebook的快捷键

Jupyter Notebook 提供了许多快捷键以方便操作。这些快捷键分为两类&#xff1a;命令模式快捷键和编辑模式快捷键。 命令模式快捷键&#xff1a; 在命令模式下&#xff0c;细胞边框是蓝色的。这些快捷键主要用于操作单元格。 Enter&#xff1a;进入编辑模式Shift Enter&…