1.RDD持久化选项:
memory_only:以非持久化的方式存在于内存(默认):
memory_and_disk:以非持久化的方式将RDD以Java对象的方式存在于内存中,当无法容纳时将其存储于磁盘。
memory_only_ser:以序列化的方式将RDD存于内存
disk_only:将RDD分区存于磁盘。
提交作业首次执行时,我们可以调用RDD提供的persist或者cache方法进行操作,再次使用该RDD时可以直接从之前的缓存区获得而无需再次进行计算。
2.具体选项
内存缓存:RDD中的每一个分区所对应的数据块会被内存缓存memorystore管理,缓存在内部是一个哈希表,数据块名称为键,值为数据块内容。当内存达到我们设置的阈值时,会执行一些释放内存空间的策略,丢弃数据块或者将数据块存储到磁盘上。若丢弃即直接删除数据块,是否影响spark程序的错误恢复机制要看依赖关系的可回溯性。若删除的RDD的父RDD是可回溯的,则删除后不影响错误恢复,如果此RDD本身就是第一个RDD,且数据无法被回溯,则程序会出错。
3.磁盘缓存
首先数据块会被放在磁盘中我们设置的目录下。
其次,在磁盘中文件的名字与数据块名的映射关系是通过哈希算法得到的。
网友评论