概念:Lineage 血统
理解:表示任务执行的生命周期(整个任务的执行过程)

  • 检查点(本质是通过将RDD写入Disk做检查点)是为了通过Lineage(血统)做容错的辅助,Lineage过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果之后有节点出现问题而丢失分区,从做检查点的RDD开始重做Lineage,就会减少开销。
  • 检查点类型
  • 本地目录(不推荐)
    这种模式,需要将spark-shell运行在本地模式上。
  • HDFS/S3等具有容错能力,高可靠的文件系统上(推荐,用于生产)
    这种模式,需要将spark-shell运行在集群模式上。
  • 设置检查点
scala> sc.setCheckPointDir(设置检查点目录)

举例:

// 创建检查点目录,用于保存检查点数据
# hadoop dfs -mkdir /sparkchkpt0818

// 设置检查点目录
scala> sc.setCheckpointDir("hdfs://192.168.15.131:8020/sparkchkpt0818")

scala> var rdd1 = sc.textFile("hdfs://192.168.15.131:8020/tmp_files/test_Cache.txt")
rdd1: org.apache.spark.rdd.RDD[String] = hdfs://192.168.15.131:8020/tmp_files/test_Cache.txt MapPartitionsRDD[1] at textFile at <console>:24

// 设置rdd1的检查点
scala> rdd1.checkpoint 

// 一旦触发action, 就会在检查点目录下生成检查点
scala> rdd1.count 
res2: Long = 923452