Spark cache和checkpoint

本文详细探讨了Spark中的数据持久化方法,包括Cache、Persist和Checkpoint的使用和区别。Cache用于缓存重复使用的RDD,而Checkpoint用于持久化RDD到磁盘,消除长依赖。文章解释了何时使用Cache和Checkpoint,以及它们在内存管理和故障恢复中的作用。
摘要由CSDN通过智能技术生成

         本文阐述了Spark中几种数据持久化方法Cache/Persist/Checkpoint的用法以及区别和联系,对于计算链条过长或者数据量较大的Spark任务有指导意义。原文来自:https://github.com/JerryLead/SparkInternals/blob/master/markdown/6-CacheAndCheckpoint.md


          作为区别于 Hadoop 的一个重要 feature,cache 机制保证了需要访问重复数据的应用(如迭代型算法和交互式应用)可以运行的更快。与 Hadoop MapReduce job 不同的是 Spark 的逻辑/物理执行图可能很庞大,task 中 computing chain 可能会很长,计算某些 RDD 也可能会很耗时。这时,如果 task 中途运行出错,那么 task 的整个 computing chain 需要重算,代价太高。因此,有必要将计算代价较大的 RDD checkpoint 一下,这样,当下游 RDD 计算出错时,可以直接从 checkpoint 过的 RDD 那里读取数据继续算。

Cache 机制

回到 Overview 提到的 GroupByTest 的例子,里面对 FlatMappedRDD 进行了 cache,这样 Job 1 在执行时就直接从 FlatMappedRDD 开始算了。可见 cache 能够让重复数据在同一个 application 中的 jobs 间共享。

逻辑执行图: deploy物理执行图: deploy

问题:哪些 RDD 需要 cache?

会被重复使用的(但不能太大)。

问题:如果cache数据量超过内存怎么办?

首先是内存有多大就缓存多少,当计算的时候,一部分从内存里边拿数据,一部分从磁盘拿数据

问题:怎么用cache?

rdd2.cache 然后rdd2. action(action 为抽象的)因为cache是transformation,只有遇到action时候才会真正的执行cache

问题:cache简单使用?

scala> val rdd1=sc.textFile("hdfs://hadoop01:9000/wc").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
rdd1: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:27

scala> rdd1.cache
res2: rdd1.type = ShuffledRDD[4] at reduceByKey at <console>:27

scala> rdd1.collect
res3: Array[(String, Int)] = Array(((hello,3),1), ((,1),1), ((yu,1),1), ((nihao,1),1), ((dayu,1),1))
然后登陆:http://hadoop01:4040/storage/

结果如下:


说明缓存成功

问题:用户怎么设定哪些 RDD 要 cache?

因为用户只与 driver program 打交道,因此只能用 rdd.cache() 去 cache 用户能看到的 RDD。所谓能看到指的是调用 transformation() 后生成的 RDD,而某些在 transformation() 中 Spark 自己生成的 RDD 是不能被用户直接 cache 的,比如 reduceByKey() 中会生成的 ShuffledRDD、MapPartitionsRDD 是不能被用户直接 cache 的。

问题:driver program 设定 rdd.cache() 后,系统怎么对 RDD 进行 cache?

先不看实现,自己来想象一下如何完成 cache:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值