RDD持久化处理

持久化

在数据库中,把数据写入表里的过程。
在spark中,把内存中的RDD临时永久存储起来的过程
容错机制
如果数据在内存中丢失,向父级依赖查找数据,直到找到数据为止,最坏的情况是找到hdfs重新获取数据重新计算,自动把结果补到原来持久化的位置。
两种方式会使用持久化操作:
1,数据量大,数据复杂
2,同一个rdd多次提交,即一个rdd复用

用法:

创建持久化:

就是转换算子,直接调用就可以
cache() 完全等价于 persist(),使用默认策略持久化
如果想改变策略,使用persist(策略)指定持久化策略

删除持久化:

 a.spark本身根据最近最少使用原则,自动取消持久化
 b.手动调用unpersit算子取消持久化
   从持久化的rdd中移除当前rdd,
   并把它的策略置为None

策略

两组对比
1) MEMORY_ONLY 和 MEMORY_ONLY_SER
   带SER的节省一定的空间
2) MEMORY_ONLY 和 MEMORY_AND_DISK
   MEMORY_ONLY:先存内存,如果存不下就不存了。
     读取的时候没存的部分重新读数据重新计算
   MEMORY_AND_DISK:先存内存,如果存不下存磁盘。
     读取的时候先读内存,再读磁盘中的数据
   即使重新读取数据重新计算,
   速度也比多做一次磁盘IO速度要快。
持久化策略的选择
  a.没有特殊情况,就使用默认的存储等级
    发挥出最大的CPU性能且计算速度尽可能快
  b.如果内存不太够用,可以使用SER进行使用
    节省一定的内存空间,速度也会很快。
  c.如果rdd的计算量非常复杂,可以选用Disk
  d.为了快速容错,可以选用带副本的策略
    可以避免容错的时候重新计算的时间耗费

checkPoint

检查点
也是一个很普通的算子,直接调用就可以
val sc=new SparkContext(conf)
首先sc.setCheckPointDir()设置检查点路径
对某个RDD设置检查点,把所有父级依赖全部删除
把当前状态存在这个检查点路径下,一般为hdfs。
强烈建议在做检查点之前先做持久化,为了避免重复计算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值