RDD的缓存机制, cache和persist的区别, checkpoint检查点, checkpoint代码实现方式, 缓存和checkpoint设置之后的读取顺序 11

1. RDD的缓存

  • Spark运算速度非常快的原因之一, 就是在不同操作中可以再内存中持久化或者缓存数据集.
  • 当持久化某个RDD后, 每一个节点都将计算分区结果保存在内存中, 对此RDD或衍生出的RDD进行的其他动作中重用.
  • 这使得后续的动作变得更加迅速.
  • RDD相关的持久化和缓存, 是Spark最重要的特征之一.
  • 缓存是Spark构建迭代式算法和快速交互式查询的关键.
    那么?
  1. RDD缓存之后到哪里去了?
    缓存在计算节点(worker)中每一个机器的内存当中
  2. 后续要使用到缓存的RDD时, 直接从内存中拿就可以了.
  3. 如何进行缓存(如何写代码?)

2. RDD缓存方式

  • RDD通过persist方法或者cache方法可以将前面的计算结果缓存.
  • 但是并不是这两个方法被调用时立即缓存, 而是触发后面的action时, 该RDD将会被缓存在计算节点的内存中,并供后面重用.
    在这里插入图片描述

3. persist和cache的区别

  1. cache()方法: 默认调用了无参的persist(), 无参的persist方法默认带了一个参数StorageLevel.MEMORY_ONLY
  2. persist()无参方法默认带一个参数, StorageLevel.MEMORY_ONLY.
  3. persist方法可以收到的选择缓存方法
    在这里插入图片描述
  • 缓存有可能丢失, 或者存储于内存的数据由于内存不足而被删除, RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正常执行.
  • 通过基于RDD的一系列转换,丢失的数据会被重算, 由于RDD的各个Partition是相对独立的, 因此只需要计算丢失的部分即可,并不需要重新算全部的Paritition.
rdd.persist(StorageLevel.MEMORY_AND_DISK_2) 
     	//在一个job结束后, 会启动另一个job执行缓存, 
		//缓存后没有血统关系
		//缓存的是rdd执行action后的数据结果, 以rdd形式缓存
		//用的时候直接用rdd, spark底层会自动寻找缓存
  1. Action动作后就是一个Job, 一个Job结束后, 会启动另一个Job执行缓存.
  • 缓存后血统不会改变.
  • rdd执行完Action动作后, 才会触发缓存动作,
  • 经常缓存的是shuffle后的RDD

4. checkpoint设置检查点

  • cacha()和persist()方法, 在磁盘换掉的情况下, 缓存就不起作用了.
  • 为了防止磁盘损坏造成数据丢失, 重要的数据(Shuffle后的数据)除了使用cache和persist方法外, 还要设置检查点checkpoint
  1. 代码表达方式:
//设置checkpoint的目录()
sc.setCheckponitDir("./ck")
  1. shuffle后的RDD, 设置检查点
result.checkpoint()
  1. 在生产环境中,通常将sc.setCheckpointDir("hdfs://node01:8020")
    主要目的就是: 天然借助HDFS副本机制,可以防止数据丢失
  2. cache&persist&checkpoint的区别:
    cache&persist这两个缓存之后,RDD的血统没变
    checkpoint操作之后,血统关系就断了,就没有血统关系了.
  3. 缓存和checkpoint设置之后的读取顺序
    读取顺序: cache–>checkpoint–>重新计算
  4. checkpoint在什么时候操作
    在当前的任务(job)执行完成之后,重新起一个job来进行checkpoint
    设置checkpoint之后,job就有两个
    一个action动作后,之前的一系统RDD就是一个job

5. hdfs副本保存位置

  • 一份保存在本台机器上
  • 一份保存在同一个机架的另一台机器上
  • 一份保存在另一个机架(rack)的一台机器上.
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值