Spark Core ---- RDD持久化

RDD的数据是过程数据

RDD之间进行相互迭代计算(Transformation的转换),当执行开启后,新RDD的生成,代表老RDD的消失
RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了

  • 这个特性可以最大化的利用资源,老旧RDD没用了,就从内存中清理,给后续的计算腾出空间

在这里插入图片描述
如上图:
rdd3被使用两次,第一次使用之后rdd3就不存在了。
第二次使用的时候,只能基于RDD的血缘关系,从RDD1重新执行,构建出来rdd3,供rdd5使用。

这样执行,有点浪费,rdd1,rdd2,rdd3,会构建两次。
一个RDD被多次使用,这样我们可以使用持久化技术。
持久化技术:

  • RDD缓存
  • RDD CheckPoint

RDD缓存

方案:针对之前的代码,我们将rdd3保留下来,这样性能可以得到提升

RDD的缓存技术:Spark提供了缓存API,可以让我们通过调用API,将指定的RDD数据保留在内存或者硬盘上

# RDD3 被两次使用,可以加入缓存进行优化
rdd3.cache()     # 缓存到内存中
rdd3.persist(StorageLevel.MEMORY_ONLY)     # 仅内存缓存。 cache() 底层依靠这个使用,上面是一个快捷调用而已
rdd3.persist(StorageLevel.MEMORY_ONLY_2)     # 仅内存缓存,2个副本

rdd3.persist(StorageLevel.DISK_ONLY)   # 仅缓存硬盘上 
rdd3.persist(StorageLevel.DISK_ONLY_2)   # 仅缓存硬盘上,2个副本
rdd3.persist(StorageLevel.DISK_ONLY_3)   # 仅缓存硬盘上,3个副本

rdd3.persist(StorageLevel.MEMORY_AND_DISK)   # 先放内存,不够放硬盘
rdd3.persist(StorageLevel.MEMORY_AND_DISK_2)   # 先放内存,不够放硬盘,2个副本

rdd3.persist(StorageLevel.OFF_HEAP)   # 堆外内存(系统内存)

# 如上API,自行选择使用即可
# 一般建议使用  rdd3.persist(StorageLevel.MEMORY_AND_DISK)
# 如果内存比较小的集群,建议使用rdd3.persist(StorageLevel.DISK_ONLY) ,或者就别用缓存了,用CheckPoint

# 主动清理缓存 API
rdd.unpersist()

缓存特点1:
当你使用缓存时,不管是写在内存还是硬盘中。每个Executor对应的机器上都会缓存这份数据。
这个缓存的rdd3,在逻辑上是一个整体,物理上分为三块。和hadoop的分散存储是一样的。

缓存特点2:
但是严格来说,设计上是认为缓存时不安全的。比如断电,计算任务内存不足,把缓存清理给计算让路。硬盘中因为硬盘物理损坏也可能丢失。
缓存如果丢失,就只有重新计算。所以被缓存的RDD必须保留前置血缘关系,这是缓存RDD的特点。

RDD CheckPoint

CheckPoint技术,也是将RDD的数据保存起来,但是它是仅支持硬盘存储
并且:它在设计上认为是最安全的,不保留血缘关系

缓存是将数据保存在内存或者本地硬盘中。
CheckPoint是将数据保存在HDFS中,将各个分区的数据进行收集,统一进行保存。而缓存是分散存储。

缓存和CheckPoint对比

  • CheckPoint不管分区数量多少,风险是一样的。缓存分区越多,风险越高
  • CheckPoint支持写入HDFS。缓存不行,HDFS是高可靠存储,CheckPoint被认为是安全的
  • CheckPoint不支持内存,缓存可以,缓存如果写内存,性能比CheckPoint要好一些
  • CheckPoint因为设计认为是最安全的,所以不保留血缘关系,而缓存因为设计上认为不安全,所以保留血缘关系

在两个选择使用方面,数据量不大的使用缓存,数据量大的使用CheckPoint

# 设置CheckPoint第一件事情,选择CP的保存路径
# 如果是Local模式,可以支持本地文件系统,如果在集权运行,千万要用HDFS
sc.setCheckpointDir("hdfs://node1:8020/output/ckp")
# 用的时候,直接调用 checkpoint算子即可
rdd.checkpoint()
总结:

1、Cache和CheckPoint区别
Cache是轻量化保存RDD数据,可存储在内存和硬盘,是分散存储,设计上数据是不安全的(保留RDD血缘关系)
CheckPoint是重量级保存RDD数据,是集中存储,只能存储在HDFS上,设计上是安全的(不保留血缘关系)

2、Cache和CheckPoint的性能对比
Cache性能更好,因为是分散存储,多个Executor并行执行,效率高,但是风险大。可以保存到内存中(比较占内存),更快。
CheckPoint比较慢,因为是集中存储,设计到网络IO,但是存储到HDFS上更加安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值