spark基礎之spark streaming的checkpoint機制
一 什麼型別的資料需要使用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引數
相關文章
- Spark Streaming 的容錯機制Spark
- spark-streaming之 socketTextStreamSpark
- hadoop基礎學習三十一(spark-streaming)HadoopSpark
- spark學習筆記-- Spark StreamingSpark筆記
- Spark 系列(十四)—— Spark Streaming 基本操作Spark
- Spark 系列(十五)—— Spark Streaming 整合 FlumeSpark
- 【Spark】Spark容錯機制Spark
- Spark學習進度11-Spark Streaming&Structured StreamingSparkStruct
- Spark學習筆記(三)-Spark StreamingSpark筆記
- Spark Streaming VS FlinkSpark
- Spark Streaming入門Spark
- Spark Streaming 之 Kafka 偏移量管理SparkKafka
- Spark 以及 spark streaming 核心原理及實踐Spark
- Spark Streaming + Spark SQL 實現配置化ETSparkSQL
- Spark基礎Spark
- Spark Streaming的PIDRateEstimator與backpressureSpark
- Cris 的 Spark Streaming 筆記Spark筆記
- Spark Streaming中的Window操作Spark
- Spark IO機制Spark
- Spark Streaming學習——DStreamSpark
- Spark Streaming 流式處理Spark
- Spark Streaming :基本工作原理Spark
- Spark Structured Streaming 解析 JSONSparkStructJSON
- Spark Streaming Failed to read checSparkAI
- Spark Streaming監聽HDFS檔案(Spark-shell)Spark
- Spark-Streaming的學習使用Spark
- Spark Streaming和Flink的區別Spark
- spark structed streaming 寫入hudi表SparkStruct
- scala基礎語法-----Spark基礎Spark
- Spark Streaming——Spark第一代實時計算引擎Spark
- Spark之spark shellSpark
- Spark RPC框架原始碼分析(三)Spark心跳機制分析SparkRPC框架原始碼
- spark structured-streaming 最全的使用總結SparkStruct
- HDFS 重要機制之 checkpoint
- Spark Streaming(六):快取與持久化Spark快取持久化
- 實戰|使用Spark Streaming寫入HudiSpark
- Spark Streaming--開窗函式over()Spark函式
- Spark Streaming 生產、消費流程梳理Spark
- Spark Streaming簡單入門(示例+原理)Spark