Spark CheckPoint徹底解密(41)


一、Checkpoint到底是什麼?

1, Spark在生產環境下經常會面臨TranformationsRDD非常多(例如一個Job中包含1萬個RDD)或者具體Tranformation產生的RDD本身計算特別複雜和耗時(例如計算時常超過1個小時),此時我們必須考慮對計算結果數據的持久化;

2, Spark是擅長多步驟迭代,同時擅長基於Job的複用,這個時候如果能夠對曾經計算的過程產生的數據進行復用,就可以極大的提升效率;

3, 如果採用persist把數據放在內存中的話,雖然是最快速的但是也是最不可靠的;如果放在磁盤上也不是完全可靠的!例如磁盤會損壞。

4, Checkpoint的產生就是爲了相對而言更加可靠的持久化數據,在Checkpoint可以指定把數據放在本地並且是多副本的方式,但是在正常的生產環境下是放在HDFS,這就天然的藉助了HDFS高容錯的高可靠的特徵來完成了最大化的可靠的持久化數據的方式;

5, Checkpoint是爲了最大程度保證絕度可靠的複用RDD計算數據的Spark的高級功能,通過Checkpoint我們通過把數據持久化的HDFS來保證數據最大程度的安全性;

6, Checkpoint就是針對整個RDD計算鏈條中特別需要數據持久化的環節(後面會反覆使用當前環節的RDD)開始基於HDFS等的數據持久化複用策略,通過對RDD啓動checkpoint機制來實現容錯和高可用;

 

二、Checkpoint原理機制

1, 通過調用SparkContext.setCheckpointDir方法來指定進行Checkpoint操作的RDD把數據放在哪裏,在生產集羣中是放在HDFS上的,同時爲了提高效率在進行checkpoint的使用可以指定很多目錄

2, 在進行RDDcheckpoint的時候其所依賴的所有的RDD都會從計算鏈條中清空掉;

3, 作爲最佳實踐,一般在進行checkpoint方法調用前通過都要進行persist來把當前RDD的數據持久化到內存或者磁盤上,這是因爲checkpointLazy級別,必須有Job的執行且在Job執行完成後纔會從後往前回溯哪個RDD進行了Checkpoint標記,然後對該標記了要進行CheckpointRDD新啓動一個Job執行具體的Checkpoint的過程;

4, Checkpoint改變了RDDLineage

5, 當我們調用了checkpoint方法要對RDD進行Checkpoint操作的話,此時框架會自動生成RDDCheckpointData,當RDD上運行過一個Job後就會立即觸發RDDCheckpointData中的checkpoint方法,在其內部會調用doCheckpoint,實際上在生產環境下會調用ReliableRDDCheckpointDatadoCheckpoint,在生產環境下會導致ReliableCheckpointRDDwriteRDDToCheckpointDirectory的調用,而在writeRDDToCheckpointDirectory方法內部會觸發runJob來執行把當前的RDD中的數據寫到Checkpoint的目錄中,同時會產生ReliableCheckpointRDD實例;








 

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章