您好,登錄后才能下訂單哦!
一、Checkpoint到底是什么?
1, Spark在生產環境下經常會面臨Tranformations的RDD非常多(例如一個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, 在進行RDD的checkpoint的時候其所依賴的所有的RDD都會從計算鏈條中清空掉;
3, 作為最佳實踐,一般在進行checkpoint方法調用前通過都要進行persist來把當前RDD的數據持久化到內存或者磁盤上,這是因為checkpoint是Lazy級別,必須有Job的執行且在Job執行完成后才會從后往前回溯哪個RDD進行了Checkpoint標記,然后對該標記了要進行Checkpoint的RDD新啟動一個Job執行具體的Checkpoint的過程;
4, Checkpoint改變了RDD的Lineage;
5, 當我們調用了checkpoint方法要對RDD進行Checkpoint操作的話,此時框架會自動生成RDDCheckpointData,當RDD上運行過一個Job后就會立即觸發RDDCheckpointData中的checkpoint方法,在其內部會調用doCheckpoint,實際上在生產環境下會調用ReliableRDDCheckpointData的doCheckpoint,在生產環境下會導致ReliableCheckpointRDD的writeRDDToCheckpointDirectory的調用,而在writeRDDToCheckpointDirectory方法內部會觸發runJob來執行把當前的RDD中的數據寫到Checkpoint的目錄中,同時會產生ReliableCheckpointRDD實例;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。