【SPARK-CORE】checkpoint机制

本文主要介绍SPARK RDD的checkpoinnt机制

 

checkpoint机制介绍

checkpoint是将RDD保存到可靠的存储中的机制,主要目的是提高应用的容错能力和持久性。Checkpointing 将数据从内存中转移到磁盘存储,使得在出现节点故障时,Spark 可以从存储中恢复数据,而不需要重新计算所有的数据。这在复杂的数据处理应用程序中尤为重要。

 

如何使用

  1. 指定checkpoint目录
  2. 调用checkpoint方法
  3. 执行action算子,触发job
val conf = new SparkConf().setAppName("Checkpoint Example")
val sc = new SparkContext(conf)
// 指定checkpoint目录
sc.setCheckpointDir("hdfs://path/to/checkpoint/dir")
val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5))
// 显示的调用checkpoint()
rdd.checkpoint()
// 执行 action 以触发 checkpoint
rdd.count()  

 Checkpoint 的原理

  1. 触发条件

    • Checkpoint 并不会立即执行,必须要有 action 操作(如 count()collect() 等)触发。
  2. 血统图重置

    • 当 RDD 被 checkpoint 之后,其血统图将被重置,只包含到 checkpoint 文件的引用。这极大地减少了 DAG 的复杂性和计算开销。
  3. 可靠存储

    • Checkpoint 数据被存储在设置的 checkpoint 目录中,该目录应在可靠的存储系统中,如 HDFS。
  4. 恢复机制

    • 在发生节点故障时,Spark 可以从 checkpoint 目录中恢复数据,而不必重新计算所有 RDD。

使用技巧

由于checkpoint会触发算子的重新计算然后保存计算结果到指定的目录,因此在调用checkpoint方法之前最好对算子进行一个持久化操作,这样可以确保 RDD 在内存中或磁盘上有一个缓存副本,减少重复计算的开销。目前spark还不支持异步checkpoint

rdd = spark.read.json('hdfs://data/xx')
res = rdd.map(data => line.split(',')).filter(data=>xxx)
// 先对数据进行一个缓存
res.persist()

// 1.设置checkpoint目录


// 2.checkpoint
res.checkpoint()

// 3. action触发job
res.collect()

 

posted @ 2024-06-15 11:57  fanrucong  阅读(24)  评论(0编辑  收藏  举报