spark五 缓存和检查点

——

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

缓存

cache
persist
spark五 缓存和检查点
发现cache最终也是调用了persist方法
spark五 缓存和检查点

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

checkpoint(检查点):

  1. 在业务执行的的过程中,有时候中间结果数据或shuffle后的数据很重要,为了保证数据的安全性,需要做checkpoint
  2. checkpoint的地址可以存储到本地也可以存储的文件存储系统,最好是HDFS,便于集群所有的节点都能够访问到,而且hdfs基于多副本机制,也保证了数据的安全性
  3. 在checkpoint之前,最好先cache,这样在checkpoint的时候,系统会直接从cache里取数据进而checkpoint
  4. 后期再调用shuffle后的数据的时候,会首先找是否cache,如果cache了,就会从缓冲里取数据
  5. 如果没有cache,系统就会找是否checkpoint,如果checkpoint,就直接从checkpoint的目录里取数据
  6. 如果没有checkpoint,系统就重新shuffle来获取数据

checkpoint的步骤:

  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