【Spark系列5】cache和persist的区别
来源:互联网 发布:郑州景安网络怎么样 编辑:程序博客网 时间:2024/06/07 19:48
通过观察RDD.Scala源代码即可知道cache和persist的区别:
def persist(newLevel: StorageLevel): this.type = {
if (storageLevel != StorageLevel.NONE && newLevel != storageLevel) {
throw new UnsupportedOperationException( "Cannot change storage level of an RDD after it was already assigned a level")
}
sc.persistRDD(this)
sc.cleaner.foreach(_.registerRDDForCleanup(this))
storageLevel = newLevel
this
}
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)
/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
def cache(): this.type = persist()
可知:
1)RDD的cache()方法其实调用的就是persist方法,缓存策略均为MEMORY_ONLY;
2)可以通过persist方法手工设定StorageLevel来满足工程需要的存储级别;
3)cache或者persist并不是action;
附:cache和persist都可以用unpersist来取消
查看 StorageLevel 类的源码:
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(false, false, true, false) ......}
class StorageLevel private( private var _useDisk: Boolean, private var _useMemory: Boolean, private var _useOffHeap: Boolean, private var _deserialized: Boolean, private var _replication: Int = 1) extends Externalizable { ...... def useDisk: Boolean = _useDisk def useMemory: Boolean = _useMemory def useOffHeap: Boolean = _useOffHeap def deserialized: Boolean = _deserialized def replication: Int = _replication ......}
可以看到StorageLevel类的主构造器包含了5个参数:
- useDisk:使用硬盘(外存)
- useMemory:使用内存
- useOffHeap:使用堆外内存,这是Java虚拟机里面的概念,堆外内存意味着把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机)。这样做的结果就是能保持一个较小的堆,以减少垃圾收集对应用的影响。
- deserialized:反序列化,其逆过程序列化(Serialization)是java提供的一种机制,将对象表示成一连串的字节;而反序列化就表示将字节恢复为对象的过程。序列化是对象永久化的一种机制,可以将对象及其属性保存起来,并能在反序列化后直接恢复这个对象
- replication:备份数(在多个节点上备份)
理解了这5个参数,StorageLevel 的12种缓存级别就不难理解了。
http://blog.csdn.net/shen_jz2012/article/details/48417037
- 【Spark系列5】cache和persist的区别
- Spark中cache和persist的区别
- spark cache和persist的区别
- Spark中persist和cache的区别
- Spark的cache和persist
- Spark RDD中cache和persist的区别
- Spark RDD中cache和persist的区别
- 2017.06.15--spark中cache和persist的区别
- RDD中cache和persist的区别
- RDD中cache和persist的区别
- 每次进步一点点——spark中cache和persist的区别
- spark中的cache() persist() checkpoint()之间的区别
- spark中的cache() persist() checkpoint()之间的区别
- Spark RDD的缓存 rdd.cache() 和 rdd.persist()
- Spark中cache和persist的作用以及存储级别
- Spark RDD的缓存 rdd.cache() 和 rdd.persist()
- scala 学习笔记4 cache 和persist的区别
- spark cache persist
- Java 极光推送分组推送
- IAR Error[Pe020]: identifier 'FILE' is undefined 解决方法
- ubuntu14.04.1安装chrome 浏览器
- Windows Server2008 R2 设置允许多个人远程连接桌面
- Web性能压力测试工具之WebBench
- 【Spark系列5】cache和persist的区别
- python中的多线程爬虫
- <数据结构与算法>最优二叉树——霍夫曼树
- MySql Oracle 日期比较对比
- 渐变色应该怎么玩
- maven snapshot和release版本的区别
- PHP设计——单例模式与工厂模式
- [初学笔记]矩阵常用函数
- jsp页面生成UUID