spark五 缓存(持久化)和检查点

这里写目录标题

作用

可以在内存中持久化或缓存多个数据集。当持久化某个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此RDD或衍生出的RDD进行的其他动作中重用,一方面提高效率,另一方面内存加快速度
另外避免重新计算导致dirver端比如累加器多次累加

缓存

并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用

缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition。

cache
persist
在这里插入图片描述
发现cache最终也是调用了persist方法
在这里插入图片描述

遇到的问题
memory_only 3个g,内存只有2g,缓存2g,用到它是找缓存,发现缓存不够,就重新计算

checkpoint(检查点):

磁盘,截断血缘关系,在真正任务执行完后会再次重新计算一次,这次重新计算的结果才会存到hdfs上。所以为了提高效率,应该先cache,然后再checkpoint,这样就只需要计算一次了

  1. 中间结果数据或shuffle后的数据很重要,为了保证数据的安全性,需要做checkpoint到hdfs上(便于集群所有的节点都能够访问到,而且hdfs基于多副本机制,也保证了数据的安全性)
  2. checkpoint之前,最好先cache,调用shuffle后的数据的时候,会首先找是否cache,如果cache了,就会从缓冲里取数据
  3. 如果没有cache,系统就会找是否checkpoint,如果checkpoint,就直接从checkpoint的目录里取数据
  4. 如果都没有,系统就重新shuffle来获取数据
  5. 每一个checkpoint都会创建一个属于这个RDD的文件夹,所以rdd1.checkpoint然后 rdd2.checkpoint不会覆盖
  6. 对RDD进行checkpoint操作并不会马上被执行,必须执行Action操作才能触发

checkpoint的api:

  1. 设置checkpoint的目录 sc.setCheckpointDir("hdfs://min1:9000/chk")
  2. 吧shuffle后的结果cache rdd1.cache()
  3. 把shuffle后的数据进行checkpoint rdd1.checkpoint

rdd2.checkpoint不会覆盖 每一个checkpoint都会创建一个文件夹属于这个RDD

查看是否checkpoint rdd1.isCheckpointed
查看checkpoint的文件信息: rdd1.getCheckpoint

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orange大数据技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值