Checkpoint的原理剖析

2021-09-23 17:33:24 字數 959 閱讀 1078

作用:spark的容錯機制,避免重新計算資料

1.如何進行checkpoint?

sparkcontext.setcheckpointdir()

rdd.checkpoint()

具體轉變:

對rdd呼叫checkpoint()方法之後,它就接受了rddcheckpointdata物件的管理

rddcheckpointdata物件會負責將呼叫了checkpoint()方法的rdd的狀態設定為markedforcheckpoint

rdd所在job執行結束後,會呼叫job中最後乙個rdd的docheckpoint()方法,沿著finalrdd的lineage向上查詢,標記為markedforcheckpoint的rdd,並將其標記為checkpointingprogress

啟動乙個單獨的job,來講lineage中,標記為checkpointingprogress的rdd,進行checkpoint操作,也就是將其資料寫入 sparkcontext.setcheckpointdir()方法設定的檔案系統中

將rdd的資料進行checkpoint之後,會改變rdd的lineage,也就是說,會清楚掉rdd所有的依賴,並強行將其父rdd設定為乙個checkpointrdd,而且rdd狀態變成checkpointed

2.checkpoint與持久化的不同:

(1)前者單獨存放在高容錯的hdfs檔案系統,後者放在記憶體中

(2)前者改變了被呼叫rdd的lineage,後者沒有

3.rdd.iterator()_也會讀取checkpoint資料

4.給checkpoint的rdd,建議先進行persist(storagelevel.disk_only)

原始碼:org.apache.spark.rdd.rdd.scala 

iterator() 

computeorreadcheckpoint()

checkpointrdd.scala 

Checkpoint的執行原理和原始碼實現

checkpoint 到底是什麼和需要用 checkpoint 解決什麼問題 spark 在生產環境下經常會面臨 transformation 的 rdd 非常多 例如乙個job 中包含1萬個rdd 或者是具體的 transformation 產生的rdd 本身計算特別複雜和耗時 例如計算時常超過1...

多型的原理剖析

多型滿足條件 多型分為兩類 靜態多型 函式過載 和 運算子過載屬於靜態多型,復用函式名。動態多型 派生類和虛函式實現執行時多型。靜態多型和動態多型區別 靜態多型的函式位址早繫結 編譯階段確定函式位址。動態多型的函式位址晚繫結 執行階段確定函式位址。建立乙個父類 class animal 當不加vir...

epoll原理剖析

首先我們來定義流的概念,乙個流可以是檔案,socket,pipe等等可以進行i o操作的核心物件。不管是檔案,還是套接字,還是管道,我們都可以把他們看作流。之後我們來討論i o的操作,通過read,我們可以從流中讀入資料 通過write,我們可以往流寫入資料。現在假定乙個情形,我們需要從流中讀資料,...