1. 程式人生 > >spark筆記之RDD容錯機制之checkpoint

spark筆記之RDD容錯機制之checkpoint

原理 chain for 機制 方式 方法 相對 例如 contex

10.checkpoint是什麽
(1)、Spark 在生產環境下經常會面臨transformation的RDD非常多(例如一個Job中包含1萬個RDD)或者具體transformation的RDD本身計算特別復雜或者耗時(例如計算時長超過1個小時),這個時候就要考慮對計算結果數據持久化保存;
(2)、Spark是擅長多步驟叠代的,同時擅長基於Job的復用,這個時候如果能夠對曾經計算的過程產生的數據進行復用,就可以極大的提升效率;
(3)、如果采用persist把數據放在內存中,雖然是快速的,但是也是最不可靠的;如果把數據放在磁盤上,也不是完全可靠的!例如磁盤會損壞,系統管理員可能清空磁盤。
(4)、Checkpoint的產生就是為了相對而言更加可靠的持久化數據,在Checkpoint的時候可以指定把數據放在本地,並且是多副本的方式,但是在生產環境下是放在HDFS上,這就天然的借助了HDFS高容錯、高可靠的特征來完成了最大化的可靠的持久化數據的方式;
假如進行一個1萬個算子操作,在9000個算子的時候persist,數據還是有可能丟失的,但是如果checkpoint,數據丟失的概率幾乎為0。
11.checkpoint原理機制
(1)當RDD使用cache機制從內存中讀取數據,如果數據沒有讀到,會使用checkpoint機制讀取數據。此時如果沒有checkpoint機制,那麽就需要找到父RDD重新計算數據了,因此checkpoint是個很重要的容錯機制。checkpoint就是對於一個RDD chain(鏈)如果後面需要反復使用某些中間結果RDD,可能因為一些故障導致該中間數據丟失,那麽就可以針對該RDD啟動checkpoint機制,使用checkpoint首先需要調用sparkContext的setCheckpoint方法,設置一個容錯文件系統目錄,比如hdfs,然後對RDD調用checkpoint方法。之後在RDD所處的job運行結束後,會啟動一個單獨的job來將checkpoint過的數據寫入之前設置的文件系統持久化,進行高可用。所以後面的計算在使用該RDD時,如果數據丟失了,但是還是可以從它的checkpoint中讀取數據,不需要重新計算。
(2)persist或者cache與checkpoint的區別在於,前者持久化只是將數據保存在BlockManager中但是其lineage是不變的,但是後者checkpoint執行完後,rdd已經沒有依賴RDD,只有一個checkpointRDD,checkpoint之後,RDD的lineage就改變了。persist或者cache持久化的數據丟失的可能性更大,因為可能磁盤或內存被清理,但是checkpoint的數據通常保存到hdfs上,放在了高容錯文件系統。

spark筆記之RDD容錯機制之checkpoint