spark checkpoint

Spark的checkpoint

1. 为什么要使用checkpoint

当一个计算有上百个甚至更多个rdd的时候,如果前20个rdd的计算结果重复被使用,这个时候我们就可以使用checkpoint将前20个rdd的计算结果缓存到本地。大大提高运算效率,

当RDD使用cache机制从内存中读取数据,如果数据没有读到,会使用checkpoint机制读取数据。此时如果没有checkpoint机制,那么就需要找到父RDD重新计算数据了,因此checkpoint是个很重要的容错机制。checkpoint就是对于一个RDD chain,如果中间某些中间结果RDD,后面需要反复使用该数据,可能因为一些故障导致该中间数据丢失,那么就可以针对该RDD启动checkpoint机制

2. 使用checkpoint

  1. 首先需要调用sparkContext的setCheckpointDir(“path”),设置checkpoint保存的路径,比如hdfs路径
  2. 对RDD调用checkpoint方法
  3. 当rdd调用action的时候,启动一个job计算rdd,当此RDD所处的job运行结束后,会启动一个单独的job,来将checkpoint过的数据写入之前设置的文件系统持久化,进行高可用。所以后面的计算在使用该RDD时,如果数据丢失了,但是还是可以从它的checkpoint中读取数据,不需要重新计算。

源码中RDD里的checkpoint()方法的注释

/**
   * Mark this RDD for checkpointing. It will be saved to a file inside the checkpoint
   * directory set with `SparkContext#setCheckpointDir` and all references to its parent
   * RDDs will be removed. This function must be called before any job has been
   * executed on this RDD. It is strongly recommended that this RDD is persisted in
   * memory, otherwise saving it on a file will require recomputation.
  */

里面建议在执行checkpoint()方法之前先对rdd进行persisted操作,当在rdd执行action的时候,启动一个job执行rdd的计算,当计算执行到rdd设置checkpoint的点,此时就会将计算的结果从内存中写入之前设置的文件系统持久化,进行高可用。这样做的好处是,不会启动一个新的job进行计算,checkpoint到本地。

val data = sc.textFile("/spark/text.data").cache() // 注意要cache 
sc.setCheckpointDir("/spark/checkpoint") //设置checkpoint目录
data.checkpoint //对rddcheckpoin
data.count //rdd执行aciton

3. checkpoint与cache的区别

会被重复使用的(但是)不能太大的RDD需要cache。cache 只使用 memorycache持久化只是将数据保存在BlockManager中但是其lineage是不变的

checkpoint执行完后,rdd已经没有依赖RDD,只有一个checkpointRDD,checkpoint之后,
RDD的lineage就改变了。而且,持久化的数据丢失的可能性更大,因为可能磁盘或内存被清理,但是checkpoint的数据通常保存到hdfs上,放在了高容错文件系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值