RDD persist持久化机制和checkpoint检查点机制区别

持久化存储

persist

  • 功能:对RDD(包含依赖关系)进行缓存,可以自己指定缓存的级别
  • 场景:根据资源情况,将RDD缓存在不同的地方或者缓存多份。一般适用于离线场景
  • 语法persist(StorageLevel)
    • StorageLevel:设置缓存级别
      • MEMORY_ONLY:缓存仅在内存
      • DISK_ONLY:缓存仅在磁盘
      • MEMORY_AND_DISK:优先缓存在内存,如果内存不足,再缓存到磁盘

举例说明:

rdd.persist(StorageLevel.MEMORY_AND_DISK) # 缓存在内存中,如果内存不足则存入磁盘

rdd.persist(StorageLevel.MEMORY_AND_DISK_2) # 缓存两份

cache

cache和persist本质上都是persist缓存,cache调用的就是persist,但是不能指定缓存级别,persist允许指定缓存级别

persist(StorageLevel.MEMORY_ONLY)的简写,缓存仅在内存中


unpersist

  • 功能:将缓存的RDD进行释放
  • 语法unpersist
    • unpersist(blocking=True):等RDD释放完再继续下一步
      • blocking = True:阻塞
  • 场景:明确RDD已经不再使用,后续还有很多的代码需要执行,将RDD的数据从缓存中释放,避免占用资源
  • 注意:如果不释放,这个Spark程序结束,也会释放这个程序中的所有内存
  • 规范:构建缓存cache或者persist一定要与释放缓存unpersist成对出现


检查点机制

checkpoint

  • 功能:将RDD的数据存储在可靠的存储系统(HDFS)中
  • 语法
# 设置一个检查点目录
sc.setCheckpointDir("存储路径")

# 将RDD的数据持久化存储在HDFS
rs_rdd.checkpoint()
  • 注意:在代码中会专门多一个job,用于构建数据
  • 场景:高安全性,适合对RDD的数据安全性要求比较高,对性能要求不是特别高的情况下。一般适用于实时场景下


总结

区别持久化检查点
存储位置保存在本地的内存或磁盘保存在可靠的存储系统(HDFS)中
生命周期程序结束后会被清除或者调用unpersist方法清除程序结束后依然存在,只能手动清除
依赖关系保存的是RDD,会保留RDD的血脉关系保存的是RDD的数据,不包含血脉关系
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值