2021年大数据Spark(十八):Spark Core的RDD Checkpoint
目錄
RDD Checkpoint
引入
API
代碼演示
總結:持久化和Checkpoint的區別
問題:
答案:
區別:
RDD Checkpoint
引入
???RDD 數據可以持久化,但是持久化/緩存可以把數據放在內存中,雖然是快速的,但是也是最不可靠的;也可以把數據放在磁盤上,也不是完全可靠的!例如磁盤會損壞等。
Checkpoint的產生就是為了更加可靠的數據持久化,在Checkpoint的時候一般把數據放在在HDFS上,這就天然的借助了HDFS天生的高容錯、高可靠來實現數據最大程度上的安全,實現了RDD的容錯和高可用。
在Spark Core中對RDD做checkpoint,可以切斷做checkpoint RDD的依賴關系,將RDD數據保存到可靠存儲(如HDFS)以便數據恢復;
API
第一步:sc.setCheckpointDir("HDFS目錄") //HDFS的目錄
第二步:rdd.checkpoint //后續會被多次頻繁使用到的RDD/很重要的RDD
?
代碼演示
package cn.itcast.coreimport org.apache.spark.{SparkConf, SparkContext}/*** RDD數據Checkpoint設置,案例演示*/
object SparkCkptTest {def main(args: Array[String]): Unit = {val sparkConf: SparkConf = new SparkConf().setAppName(this.getClass.getSimpleName.stripSuffix("$")).setMaster("local[*]")val sc: SparkContext = new SparkContext(sparkConf)sc.setLogLevel("WARN")// 設置檢查點目錄,將RDD數據保存到那個目錄sc.setCheckpointDir("./ckp")// 讀取文件數據val datasRDD = sc.textFile("data/input/words.txt")// 調用checkpoint函數,將RDD進行備份,需要RDD中Action函數觸發datasRDD.checkpoint()datasRDD.count()//再次執行count函數, 此時從checkpoint讀取數據datasRDD.count()// 應用程序運行結束,關閉資源sc.stop()}
}
?
總結:持久化和Checkpoint的區別
問題:
緩存持久化 VS Checkpoint 開發中用哪個?
答案:
緩存持久化(保證后續再次使用的速度) + Checkpoint(保證安全)
區別:
?1)、存儲位置
?Persist 和 Cache 只能保存在本地的磁盤和內存中(或者堆外內存);
Checkpoint 可以保存數據到 HDFS 這類可靠的存儲上;
?2)、生命周期
Cache和Persist的RDD會在程序結束后會被清除或者手動調用unpersist方法;
Checkpoint的RDD在程序結束后依然存在,不會被刪除;
?3)、Lineage(血統、依賴鏈、依賴關系)
Persist和Cache,不會丟掉RDD間的依賴鏈/依賴關系,因為這種緩存是不可靠的,如果出現了一些錯誤(例如 Executor 宕機),需要通過回溯依賴鏈重新計算出來;
Checkpoint會斬斷依賴鏈,因為Checkpoint會把結果保存在HDFS這類存儲中,更加的安全可靠,一般不需要回溯依賴鏈;
?
?
總結
以上是生活随笔為你收集整理的2021年大数据Spark(十八):Spark Core的RDD Checkpoint的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Spark(十七):Sp
- 下一篇: 2021年大数据Spark(十九):Sp