spark 持久化机制入门
持久化作原因及用途
默认是在内存中持久化.
当您持久化
RDD
时,每个节点都将它计算的所有分区存储在内存中,并在该数据集(或从该数据集派生的数据集)上的其他操作中重用
这些分区。这使得未来的行动更快(通常是10倍以上)。缓存是迭代算法和快速交互使用的关键工具。
可以使用persist()或cache()方法将RDD标记为持久化。
第一次在action中计算它时,它将保存在节点上的内存中。
Spark
的缓存是容错的——如果RDD
的任何分区丢失,它将自动使用最初创建它的转换重新计算。
持久化级别
- 每个持久化的
RDD
都可以使用不同的存储级别
进行存储,例如,允许您在磁盘上持久化数据集,将其持久化到内存中,但作为序列化的Java对象(以节省空间),跨节点复制它。这些级别是通过向persist()
传递一个StorageLevel
对象(Scala、Java、Python)来设置的。cache()
方法是使用默认存储级别的简写,它是仅限StorageLevel.MEMORY
(将反序列化的对象存储在内存中)。
有以下级别可以选择
如何选择存储级别
Spark的存储级别旨在提供内存使用
和CPU效率
之间的不同权衡。我们建议通过以下过程选择一个:
如果您的RDD
适合默认存储级别(仅限内存),那么就让它们这样。这是CPU效率最高的选项,允许RDD
上的操作尽可能快地运行。
如果没有,请尝试使用MEMORY-ONLY\u-user并选择一个快速序列化库,以使对象更节省空间,但访问速度仍然相当快。(Java和Scala)
不要溢出到磁盘,除非计算数据集的函数很昂贵,或者它们过滤了大量数据。否则,重新计算一个分区可能和从磁盘读取它一样快。
如果您希望快速故障恢复(例如,如果使用Spark服务来自web应用程序的请求),请使用复制的存储级别。所有存储级别都通过重新计算丢失的数据来提供完全的容错能力,但是复制的存储级别允许您继续在RDD上运行任务,而无需等待重新计算丢失的分区。
删除缓存
Spark自动监视每个节点上的缓存使用情况,并以最近最少使用(least recent used,LRU)的方式删除旧的数据分区。如果要手动删除RDD,而不是等待它从缓存中退出,请使用 RDD.unpersist()
方法。请注意,此方法在默认情况下不会阻止。要在释放资源之前阻止,请在调用此方法时指定blocking=true。
应用
在写代码中,可以用persist
或者cache
方法,cache
方法就是调用了persist
方法.
//这二者的默认级别都是MEMORY_ONLY
rdd.cache()//cache方法不可以带参数
rdd.persist()
//persist方法还可以自定义指定级别
rdd.persist(StorageLevel.MEMORY_AND_DISK)
rdd.persist(StorageLevel.MEMORY_ONLY_SER)
//cache和persist都可以用unpersist来取消
rdd.unpersist()
参考
RDD中cache和persist的区别_helloxiaozhe的博客-CSDN博客
spark 持久化机制入门相关推荐
- spark 存储机制详解
我们知道spark可以将运行过的RDD存储到内存上, 并在需要的时候重复利用. 那么spark是怎么完成这些工作的, 本文将通过分析源码来解释RDD的重复利用过程. 在上一篇文章解释了spark的执行 ...
- Redis学习之持久化机制
持久化机制 上小学的时候,我们每天都要做数学题,为了加快做题的速度,我们不可能每次遇到8 x 8都要查看乘法口诀表(最主要的原因是考试的时候,老师不允许),所以我们会通过死记硬背的方式,将8 x 8 ...
- Spark工作原理入门
Spark工作原理入门 文章目录 Spark工作原理入门 1.功能概要 基本描述 运用场景 实际使用 2.模块组成 HDFS MLlib Mesos Tachyon GraphX Spark SQL ...
- 深入理解Redis的持久化机制和原理
Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis ...
- redis的通用命令 || redis持久化机制:(RDB || AOF)
通用命令 1. keys * : 查询所有的键 2. type key : 获取键对应的value的类型 3. del key:删除指定的key value 持久化 ...
- Redis数据持久化机制AOF原理分析一---转
http://blog.csdn.net/acceptedxukai/article/details/18136903 http://blog.csdn.net/acceptedxukai/artic ...
- Redis提供的持久化机制(RDB和AOF)
Redis提供的持久化机制 Redis是一种面向"key-value"类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却 ...
- Redis持久化机制 -全量同步与增量同步的区别
全量同步与增量同步的区别 全量同步:就是每天定时(避开高峰期)或者采用一个周期实现将数据拷贝到一个地方也就是Rdb存储. 增量同步:比如采用对行为的操作实现对数据的同步,也就是AOF. 全量与增量的比 ...
- handler消息机制入门
handler消息机制入门 为什么要用handle? 我们在网络上读取图片信息时,是不能把耗时操作放在主线程里面的,当我们在子线程中获取到了图片的消息的时候,我们就需要把这个数据传给主线程. 而直接使 ...
最新文章
- eclipse 代码中突然出现特殊字符
- 微博运营与微博营销最易犯的20种错误,你犯了吗?
- 零基础python必背代码-零基础入门学习python 96集全
- jstl sql标签使用
- 【tensorflow】tensorflow -gpu安装及jupyter环境更改
- 1445.32php,nginx实现mysql的负载均衡
- 神舟电脑冲击创业板失败 首发未获证监会通过
- socket可以写成单例嘛_精读设计模式 Singleton 单例模式
- ELK之ES-Logstash-Kibana互联
- 根据年月查询每月数据并渲染到页面,支持数据的展示与折叠隐藏
- winhex 比较详细的图文使用教程
- 如何在开始菜单创建快捷方式
- 例3.1 有人用温度计测量出用华氏法表示的温度,今要求把它转换为以摄氏法表示的温度。
- zend抽象语法树AST流程解析
- 安装mysql提示oxc000007b_重装win7系统黑屏提示oxc000007b怎么办
- msfvenom生成木马的简单利用
- [css] 你是怎么选择resetting和normalizing的?为什么?
- 对图像处理中的面向对象和基于基元的理解
- ublox_f9p 代码中接入别人编译好的连接库(PPP定位)
- Linux时间子系统之Tick层
热门文章
- bigdecimal乘法_Java面试题之BigDecimal比较大小问题
- Ubuntu硬盘的挂载(临时、永久挂载)
- 喜欢熬夜的人注意!出现3大迹象时,说明身体极度危险!
- 总觉得学习效率低,看了这篇瞬间清醒了!
- dfs dtft dft fft
- matlab仿真限幅发散,GSM通信系统性能分析与MATLAB仿真.doc
- chart控件做实时曲线显示_Spark+Kafka+WebSocket+eCharts实时分析-完全记录(5)
- bootstrap日期控件 只显示 年月
- android 透明栏,Android状态栏透明(沉浸式效果)
- abaqus python 读取文件_通过Python脚本从Abaqus中的excel文件导入幅度数据