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.core
import 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這類存儲中,更加的安全可靠,一般不需要回溯依賴鏈;
spark 大數據
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。