spark基礎之spark streaming的checkpoint機制

happy19870612發表於2017-11-10

一 什麼型別的資料需要使用checkpoint?

Spark Streaming是最需要進行容錯的,因為一般都是7 * 24小時運轉,所以需要將足夠的資訊checkpoint到容錯的儲存系統上,比如HDFS,從而能夠讓他從失敗中進行恢復。有兩種資料需要被進行checkpoint:

1、後設資料checkpoint:

# 配置資訊:建立spark streaming應用程式的配置資訊,比如SparkConf中的資訊

# DStream的操作資訊:定義了應用程式計算邏輯的DStream操作資訊

# 未處理的batch資訊:那些job正在排隊,還沒處理的batch資訊

2、資料checkpoint

將實時計算過程中產生的RDD的資料儲存到可靠的儲存系統之中。對於一些將多個batch的資料進行聚合的,有狀態的轉換操作,這是很有用的,在這種操作中,生成的RDD是依賴於之前的batch的RDD的,這會導致隨著時間的推移,RDD的依賴鏈條變得越來越長。

 

要避免由於依賴鏈條越拉越長,導致的一起變得越來越長的失敗恢復時間,有狀態的轉換操作執行過程中產生的RDD,會定期的被checkpoint到可靠的儲存系統上,比如HDFS.從而消減RDD的依賴鏈條,進行而縮短失敗恢復時候的RDD恢復時間。

 

所以:後設資料checkpoint主要是為了從driver失敗中恢復過來;而RDD checkpoint主要是為了,使用到有狀態的轉換操作的時候,能夠在其生產出的資料丟失時進行快速的恢復。

 

 

二 什麼時候啟用checkpoint機制?

2.1 使用了有狀態的轉換操作

比如updateStateByKey或者reduceByKeyAndWindow操作

2.2 要保證可以從driver失敗中進行恢復

比如後設資料的checkpoint需要啟用

 

當然如果不是必須要從driver失敗中恢復或者沒有使用到轉換操作,那麼也就無需啟用checkpoint,這樣反而有助於提升效能

 

 

三 如何啟用checkpoint機制?

3.1 對於有狀態的轉換操作,啟用checkpoint機制,是比較簡單的,定期將其產生的RDD資料checkpoint。可以通過配置容錯檔案系統,比如HDFS的目錄,來啟用checkpoint機制,checkpoint資料就會寫入該目錄。

 

 

3.2 如果為了要從driver失敗中恢復,那麼啟用checkpoint機制是比較複雜的。需要改寫spark streaming應用程式

第一步:

當應用程式第一次啟動的時候,需要建立一個StreamingContext,並且呼叫其start方法進行啟動。當driver從失敗中恢復過來時,需要從checkpoint目錄記錄的後設資料中恢復出來一個StreamingContext。

如下程式碼所示:

valcheckpointDir = "hdfs://hdfs-cluster/user/spark/chkdir01"
def createContext():StreamingContext= {
    val conf = new SparkConf().setAppName("Driver Checkpoint").setMaster("local[*]")
    val ssc = new StreamingContext(conf,Seconds(2))
    val hostname = "hadoop-all-01"
   
val port= 9999;
    val lines = ssc.socketTextStream(hostname,port)
    ssc.checkpoint(checkpointDir)
    ssc
}
val context = StreamingContext.getOrCreate(checkpointDir,createContext)
context.start()
context.awaitTermination()

第二步:

必須確保Driver可以在失敗時,自動重啟。要是能夠從Driver失敗中恢復過來,執行spark streaming應用程式的叢集,就必須監控driver的執行的過程,並且在它失敗的時候將它重啟,對於standalone需要配置supervise driver,在它失敗時將其重啟

在spark-submit中,新增--deploy-mode引數,預設值是client,即在提交應用程式的機器上啟動driver,但是要能夠重啟driver就必須設定為cluster,此外需要新增--supervise引數

相關文章