天天看點

Spark修煉之道(進階篇)——Spark入門到精通:第十四節 Spark Streaming 緩存、Checkpoint機制

作者:周志湖

微信号:zhouzhihubeyond

spark stream 緩存

checkpoint

案例

通過前面一系列的課程介紹,我們知道dstream是由一系列的rdd構成的,它同一般的rdd一樣,也可以将流式資料持久化到内容當中,采用的同樣是persisit方法,調用該方法後dstream将持久化所有的rdd資料。這對于一些需要重複計算多次或資料需要反複被使用的dstream特别有效。像reducebywindow、reducebykeyandwindow等基于視窗操作的方法,它們預設都是有persisit操作的。reducebykeyandwindow方法源碼具體如下:

從上面的方法來看,它最傳回的是一個reducedwindoweddstream對象,跳到該類的源碼中可以看到在其主構造函數中包含下面兩段代碼:

通過上面的代碼我們可以看到,通過視窗操作産生的dstream不需要開發人員手動去調用persist方法,spark會自動幫我們将資料緩存當記憶體當中。同一般的rdd類似,dstream支援的persisit級别為:

Spark修煉之道(進階篇)——Spark入門到精通:第十四節 Spark Streaming 緩存、Checkpoint機制

通過前期對spark streaming的了解,我們知道,spark streaming應用程式如果不手動停止,則将一直運作下去,在實際中應用程式一般是24小時*7天不間斷運作的,是以streaming必須對諸如系統錯誤、jvm出錯等與程式邏輯無關的錯誤(failures )具體很強的彈性,具備一定的非應用程式出錯的容錯性。spark streaming的checkpoint機制便是為此設計的,它将足夠多的資訊checkpoint到某些具備容錯性的存儲系統如hdfs上,以便出錯時能夠迅速恢複。有兩種資料可以chekpoint:

(1)metadata checkpointing

将流式計算的資訊儲存到具備容錯性的存儲上如hdfs,metadata checkpointing适用于當streaming應用程式driver所在的節點出錯時能夠恢複,中繼資料包括:

configuration(配置資訊) - 建立streaming應用程式的配置資訊

dstream operations - 在streaming應用程式中定義的dstreaming操作

incomplete batches - 在列隊中沒有處理完的作業

(2)data checkpointing

将生成的rdd儲存到外部可靠的存儲當中,對于一些資料跨度為多個bactch的有狀态tranformation操作來說,checkpoint非常有必要,因為在這些transformation操作生成的rdd對前一rdd有依賴,随着時間的增加,依賴鍊可能會非常長,checkpoint機制能夠切斷依賴鍊,将中間的rdd周期性地checkpoint到可靠存儲當中,進而在出錯時可以直接從checkpoint點恢複。

具體來說,metadata checkpointing主要還是從drvier失敗中恢複,而data checkpoing用于對有狀态的transformation操作進行checkpointing

checkpointing具體的使用方式時通過下列方法:

進行了适量修改

輸入參數配置如下:

Spark修煉之道(進階篇)——Spark入門到精通:第十四節 Spark Streaming 緩存、Checkpoint機制

運作狀态圖如下:

Spark修煉之道(進階篇)——Spark入門到精通:第十四節 Spark Streaming 緩存、Checkpoint機制

首次運作時:

手動将程式停止,然後重新運作

繼續閱讀