Spark RDD Cache缓存使用详解

Spark RDD持久化与缓存:提高性能的关键 在Spark中,RDD(弹性分布式数据集)是核心数据抽象,用于分布式数据处理。RDD的持久化与缓存是一种机制,允许将RDD的数据保留在内存中,以便在后续操作中重复使用,从而提高性能。持久化是指将RDD的数据写入内存或磁盘存储,以便在需要时能够快速访问。缓存是指将RDD的数据存储在内存中,以便快速访问,而不需要再次计算。这两者结合起来可以显著提高Spark应用程序的性能,特别是对于迭代式算法和复杂的数据处理管道。Apache Spark中的RDD持久化与缓存是提高性能的关键概念。 阅读详情

目录:

1.概述
2.缓存类型
3.如何选择缓存类型
4.移除缓存数据

1.概述

Spark的开发调优有一个原则,即对多次使用的RDD进行持久化。如果要对一个RDD进行持久化,只要对这个RDD调用cache()和persist()即可。

1.1 cache()方法表示:使用非序列化的方式将RDD的数据全部尝试持久化到内存中,cache()只是一个transformtion,是lazy的,必须通过一个action触发,才能真正的将该RDD cache到内存中。
1.2 persist()方法表示:手动选择持久化级别,并使用指定的方式进行持久化。
2.缓存类型
NONE :什么类型都不是
DISK_ONLY:磁盘
DISK_ONLY_2:磁盘;双副本
MEMORY_ONLY: 内存;反序列化;把RDD作为反序列化的方式存储,假如RDD的内容存不下,剩余的分区在以后需要时会重新计算,不会刷到磁盘上。
MEMORY_ONLY_2:内存;反序列化;双副本
MEMORY_ONLY_SER:内存;序列化;这种序列化方式,每一个partition以字节数据存储,好处是能带来更好的空间存储,但CPU耗费高
MEMORY_ONLY_SER_2 : 内存;序列化;双副本
MEMORY_AND_DISK:内存 + 磁盘;反序列化;双副本;RDD以反序列化的方式存内存,假如RDD的内容存不下,剩余的会存到磁盘
MEMORY_AND_DISK_2 : 内存 + 磁盘;反序列化;双副本
MEMORY_AND_DISK_SER:内存 + 磁盘;序列化  
MEMORY_AND_DISK_SER_2:内存 + 磁盘;序列化;双副本
*********** 序列化能有效减少存储空间,默认MEMORY_ONLY
3.如何选择存储级别

如果RDD对于默认的存储级别是满足的,就不要选择其他了。这是性能最优的,最高效的(前提内存要足够,这是第一选择)

如果MEMORY_ONLY不一定满足(即:内存不够),可以尝试使用MEMORY_ONLY_SER再加上一个序列化框架(kyro),这样内存的空间更好。序列化就是为了减少空间

不要把数据写到磁盘,成本是非常高的。当数据太大的时候,可以过滤一部分数据再存,这样的话可能会更快

可以使用副本的存储级别能更快的容错,所以的storage level都提供了副本机制,这个机制能让你继续再RDD上运行task,并不需要等待重新计算。(从另外的节点拿)

PS:首选第1种方式,满足不了再使用第2种。后两种不推荐

4.移除缓存数据
Spark会自动地监控每个节点的使用情况,以一种LRU的机制(least-recently-used:最近很少使用)去自动移除。如果想手工代替这种自动去移除,可以使用RDD.unpersist()去处理
【大数据学习 | Spark-Core】RDD的缓存(cache and checkpoint) 首先存储到直接内存中,可以使得jvm的内存使用量减少,效率更高,但是比较危险,jvm中存在GC,可以清空垃圾,但是如果使用直接内存的话,垃圾多了我们可以删除,但是如果应用程序异常退出,这个时候内存是没有人可以管理的。仅内存并且是序列化的方式 _deserialized = true,将存储的jvm中的对象进行二进制byte[],存储起来,以内存的方式,序列化完毕的数据更能够减少存储空间。先以内存为主,然后再使用磁盘,存储空间不够不会报错,会存储一部分数据,可以不序列化,不序列化指的时候内存的部分。 阅读详情

相关推荐

每次进步一点点——spark中cache和persist的区别

昨天面试被问到了cache和persist区别,当时只记得是其中一个调用了另一个,但没有回答出二者的不同,所以回来后重新看了源码,算是弄清楚它们的区别了。cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间。

housir的专栏 4万+

Spark 优化——RDD缓存(cache、persist、checkpoint)的区别及策略选择

目录 一、RDD持久化 1.什么时候该使用持久化(缓存) 2. RDD cache & persist 缓存 3. RDD CheckPoint 检查点 4. cache & persist & checkpoint 的特点和区别 特点 区别 二、cache & persist 的持久化级别及策略选择 Spark的几种持久化级别: 1.MEMORY_ONLY 2.MEMORY_AND_DISK 3.MEMORY_ONLY_SER 4.MEMORY_.

TRX的博客 4602

Arduino Uno R3开发板系列学习教程(番外篇:USB驱动安装与疑难排解)

本文详细介绍了Arduino Uno R3开发板USB驱动安装与疑难排解的完整指南,特别针对国产克隆版常见的CH340驱动问题提供解决方案。从识别开发板类型到Windows/Mac系统驱动安装步骤,再到常见问题排查与高级排错技巧,帮助开发者快速解决连接问题,确保程序烧录顺利进行。

weixin_29182481的博客 583

Spark基础学习笔记:RDD持久化、存储级别与缓存

Spark基础学习笔记:RDD持久化、存储级别与缓存

py20010218的博客 2545

【从零搭建到实战运行】基于PX4-1.13与XTDrone的FAST-LIVO2 Gazebo仿真全流程解析

本文详细解析了从零开始搭建基于PX4-1.13飞控、XTDrone仿真框架与Gazebo的FAST-LIVO2无人机仿真平台的全流程。内容涵盖环境配置、Livox雷达插件定制、算法部署与参数调试,旨在帮助开发者快速构建完整的激光-惯性-视觉SLAM仿真环境,并解决集成过程中的常见问题。

weixin_29218509的博客 521

无感健康监测的未来:毫米波雷达如何重新定义睡眠科技与居家养老

毫米波雷达技术正重新定义无感健康监测,特别是在睡眠科技与居家养老领域。通过精准监测呼吸、心率和体动,无需穿戴设备即可实现临床级精度。结合合宙Air700E开发板,构建了完整的远程看护解决方案,为老年人提供跌倒检测、异常报警等安全保障,同时保护用户隐私。

cake8的博客 567

Spark中的RDD持久化缓存 cache()、persist()(附案例)

我们可以使用缓存函数:cache()、persist() 来持久化存储某个RDDn的数据集到内存或磁盘中,方便后期复用该RDD时无需从头计算。

奇迹虎虎的博客 2862

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors教程

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors

m0_69133594的博客 2826

你怎么理解Spark RDD Cache缓存?

缓存有可能丢失,或者存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。但是并不是这两个方法被调用时立即缓存,而是触发后面的action算子时,该RDD将会被缓存在计算节点的内存中,并供后面重用。访问http://localhost:4040/jobs/页面,查看第一个和第二个job的DAG图。

zjjcchina的博客 173

PCL基础:getTransformation函数全流程解析与应用实例,一篇文章精通点云变换

在 Eigen 和 PCL 中,getTransformation是一个常用的函数,用于根据输入的平移和旋转信息(如欧拉角或四元数)生成一个仿射变换矩阵(Eigen::Affine3f或 Eigen::Affine3d)。1)在 Eigen 中,可以通过四元数和平移向量构造一个变换矩阵。2)讲解了从四元数转换到欧拉角,或者从欧拉角转换到四元数的方法。

weixin_42896234的博客 1368

Spark RDD缓存中cache,persist 和checkPoint的区别

Spark RDD缓存中cache,persist 和checkPoint的区别 文章目录一、cache,persist和checkPoint是什么?二、不同点1.cache,persist2.checkPoint总结 一、cache,persist和checkPoint是什么? cache,persist和checkPoint都是Spark任务执行过程中,缓存RDD产生的数据,避免分区执行发生错误,全部RDD再按照血缘关系再重复执行所有RDD逻辑,而直接从缓存中获取某一段RDD逻辑执行产生的数据 二

weixin_44563670的博客 673

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 144

Spark RDD的缓存 rdd.cache() 和 rdd.persist()

RDD的缓存级别顺便看一下RDD都有哪些缓存级别,查看 StorageLevel 类的源码:object StorageLevel { val NONE = new StorageLevel(false, false, false, false) val DISK_ONLY = new StorageLevel(true, false, false, false) val DISK_ON

sunspeedzy的博客 1万+

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 150

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【源码解读系列之spark】Spark RDD缓存函数cache() 和 persist()原理和使用

1、RDD的缓存级别 顺便看一下RDD都有哪些缓存级别,查看storagelevel.py代码StorageLevel类如下: __all__ = ["StorageLevel"] class StorageLevel(object): """ Flags for controlling the storage of an RDD. Each StorageLevel...

helloxiaozhe的博客 920

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spark RDD缓存持久化机制深度解析:cache、persist与checkpoint

fill:#333;important;important;fill:none;root(RDD持久化机制)cache内存存储保留血缘同Job执行适合多次使用persist多种存储级别保留血缘同Job执行灵活配置checkpointHDFS存储截断血缘另启新Job永久保存。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 4249

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spark RDD缓存 persist,cache,CheckPoint

Spark RDD缓存 persist,cache,CheckPoint

qq_41982570的博客 396

spark中cache和persist的区别,rdd缓存源码解析

一、cache和persist的区别昨天面试被问到了cache和persist区别,当时只记得是其中一个调用了另一个,但没有回答出二者的不同,所以回来后重新看了源码,算是弄清楚它们的区别了。cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间。cache和persist的区别基于Spark 1.4.1 的源码,可以看到/** ...

zhuiqiuuuu的博客 681

Spark持久化中得RDD Cache缓存|RDD CheckPoint检查点|检查点添加到HDFS|缓存和检查点得区别

RDD Cache缓存 RDD通过Cache或者Persist方法将前面的计算结果缓存,默认情况下会把数据以序列化的形式缓存在JVM的堆内存中。但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。 代码实现 源码分析 默认的存储级别都是仅在内存存储一份。在存储级别的末尾加上“_2”表示持久化的数据存为两份 缓存有可能丢...

SmallScorpion 475

spark RDD缓存机制

RDD通过persist方法或cache方法可以将前面的计算结果缓存,默认情况下 persist() 会把数据以序列化的形式缓存在 JVM 的堆空间中。 但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用 通过查看源码发现cache最终也是调用了persist方法,默认的存储级别都是仅在内存存储一份,Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的。 在存储级别的末尾加上“_2”来把持久化数据存为

不言尘世 637

Spark RDD的缓存(cache)问题:[实践出真知]

最近用spark时,对于RDD的处理和操作用的较多,也顺便学习了一下关于RDD缓存的知识,我们都明白RDD之间的依赖关系,父RDD和子RDD,子RDD在运行时的数据可以从父RDD计算后得到,当RDD的层级关系较为复杂,有多级关系的时候,我们可以使用缓存RDD的方式,来减少spark程序的计算量. RDD的cache机制,有利有弊,先说我在项目中遇到的问题,在开发过程中,当子RDD有多个时,而且需...

寒夜二十五 1122

Spark RDD 缓存,持久化 cache(),persist()

1、memory_only(仅在内存中) spark会将RDD作为未序列化的java对象存于内存,如果spark估算不是所有的分区能在内存中容纳,那么Spark不会将RDD缓存,以后用到该RDD,会根据血统重新计算 userRDD.cache() userRDD.persist() userRDD.persist(StorageLevel.MEMORY_ONLY) 劣势:占用大量内存,如果缓存过多对象,将对垃圾回收产生压力 2、memory_only_ser(仅在内存中,但是经过序列化) us

小哇 1300

SparkCore:RDD的持久化/缓存

持久化/缓存RDD的持久化/缓存持久化/缓存API详解代码演示总结 RDD的持久化/缓存 引入: 在实际开发中某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存,这样下次再使用到的时候就不用再重新计算了,提高了程序运行的效率 持久化/缓存API详解 Persist方法和Cache方法 RDD通过persist或cache方法可...

4648

spark源码阅读笔记RDD(三)RDD的缓存原理

1、RDD的缓存(cache和persist) spark最重要一个能力就是:在不同的操作中把数据集缓存(cache)或存留(persist)在内存(memory) 中[1]。当持久化一个RDD后,每个节点都会把计算的分片的结果保存在内存中,之后可以对此数据集在其他action中 再次使用。这使得后续的action变得迅速(通常快10x).

legotime的博客 5425
上一篇: mybatis查询mysql的datetime类型数据时间差了14小时(时区问题)
下一篇: SpringBoot之瘦身部署
yjgithub
博客等级 码龄11年 53粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值