checkPoint

checkpoint 检查点是很多分布式系统的常用容错容灾机制,其本质就是将系统运行时的内存数据结构和状态持久化到磁盘上,在需要的时候对这些数据进行读取,然后重新构造出运行时的状态。

在Spark中使用检查点就是为了将RDD的状态保存下来,在重新执行时就不需要计算,直接从检查点读取即可

1.什么时候使用checkpoint

(1)迭代计算,要求保证数据安全

(2)对速度要求不高(跟cache进行对比)

(3)将中间结果保存到hdfs

package spark2020

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object RddCreate {
  def main(args:Array[String]):Unit={
    val config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("wc")

    //创建上下文
    val sc = new SparkContext(config)

    //设置检查点的保存目录
    sc.setCheckpointDir("checkPoint")

    //创建RDD
    //1.从内存中创建,传递的分区参数为分区数
    val listRDD:RDD[Int] = sc.makeRDD(List(1,2,3,4))

    val mapRDD: RDD[(Int, Int)] = listRDD.map((_,1))
    
    val reduceRDD: RDD[(Int, Int)] = mapRDD.reduceByKey(_+_)
    reduceRDD.checkpoint()

    reduceRDD.collect().foreach(println)

    println(reduceRDD.toDebugString)
    
  }

}

//(4) ShuffledRDD[2] at reduceByKey at RddCreate.scala:23 []
// |  ReliableCheckpointRDD[3] at collect at RddCreate.scala:26 []

 

 

package spark2020

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object RddCreate {
  def main(args:Array[String]):Unit={
    val config: SparkConf = new SparkConf().setMaster("local[*]").setAppName("wc")

    //创建上下文
    val sc = new SparkContext(config)

    //设置检查点的保存目录
    sc.setCheckpointDir("checkPoint")

    //创建RDD
    //1.从内存中创建,传递的分区参数为分区数
    val listRDD:RDD[Int] = sc.makeRDD(List(1,2,3,4))

    val mapRDD: RDD[(Int, Int)] = listRDD.map((_,1))
    mapRDD.checkpoint()
    val reduceRDD: RDD[(Int, Int)] = mapRDD.reduceByKey(_+_)
    

    reduceRDD.collect().foreach(println)

    println(reduceRDD.toDebugString)

  }

}

//(4) ShuffledRDD[2] at reduceByKey at RddCreate.scala:22 []
//+-(4) MapPartitionsRDD[1] at map at RddCreate.scala:20 []
//|  ReliableCheckpointRDD[3] at collect at RddCreate.scala:25 []

 

 




posted on 2020-12-28 16:48  happygril3  阅读(567)  评论(0)    收藏  举报

导航