首页 理论教育 缓存工作机制的解析

缓存工作机制的解析

时间:2023-06-29 理论教育 版权反馈
【摘要】:每一个RDD都可以用不同的保存级别进行保存,从而允许持久化数据集在硬盘,或者在内存中作为序列化的Java对象,甚至于跨结点复制。

缓存工作机制的解析

1.缓存的工作机制

Spark中对于缓存机制的另外一个说法为持久化,可以用Persist表示,通常Spark中用persist()或cache()方法来标记一个要被持久化的RDD,然后这个RDD一旦首次被一个动作(Action)触发计算,它将会被保留在计算结点的内存中并重用。而缓存作为一种保存数据的方式,也会出现数据丢失的可能,如果RDD的任一分区丢失了,通过使用原先创建它的转换操作,它将会被自动重算(不需要全部重算,只计算丢失的部分)。

Spark中通过unpersistRDD()来删除缓存。

每一个RDD都可以用不同的保存级别进行保存,从而允许持久化数据集在硬盘,或者在内存中作为序列化的Java对象(节省空间),甚至于跨结点复制。这些等级选择是通过将一个org.apache.spark.storage.StorageLevel对象传递给persist()方法来确定的。

2.Persist与Cache的区别

查看下述代码,可以发现cache()方法实质上是参数为memory_only的persist方法,意为仅存储在内存中,内存中无法储存的部分则不缓存,在后续再次被使用时重新计算未缓存的数据。

3.Unpersist操作

对于清除缓存的操作,源代码如下所示,就是将Persist的持久化级别改为NONE。

4.持久化的保存等级StorageLevel(www.xing528.com)

Spark中对持久化等级定义分为12类,源代码内容如下。

·MEMORY_ONLY表示数据只存储在内存中,如果不能被内存装下,不能装下的那部分分区不被缓存,并在需要时重新计算。此模式为Spark持久化的默认模式。

·MEMORY_AND_DISK表示如果RDD数据不能被内存装下,则超出的分区会被保存在硬盘上,并在需要时读取。

·MEMORY_ONLY_SER表示对象正在存储中(每一分区占用一个字节数组),通常来说,这样对于控件的利用率更加高,尤其是在使用fast serizlizer时,但是读取时会比较占用CPU。

·MEMORY_AND_DISK_SER与MEMORY_ONLY_SER类似,但是会把超出内存的分区记录在磁盘。

·DISK_ONLY表示RDD数据只储存在磁盘。

·MEMORY_ONLY_2每一个分区都储存在两个集群结点的内存中上。

·MEMPRY_AND_DISK_2每一个分区都储存在两个集群结点的内存和磁盘中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈