spark中的容錯

2021-08-03 01:25:50 字數 1915 閱讀 6943

一般來說,分布式資料集的容錯性有兩種方式:資料檢查點和記錄資料的更新。面向大規模資料分析,資料檢查點操作成本很高,需要通過資料中心的網路連線在機器之間複製龐大的資料集,而網路頻寬往往比記憶體頻寬低得多,同時還需要消耗更多的儲存資源。因此,spark選擇記錄更新的方式。但是,如果更新粒度太

細太多,那麼記錄更新成本也不低。因此,rdd只支援粗粒度轉換,即在大量記錄上執行的單個操作。將建立rdd的一系列lineage(即血統)記錄下來,以便恢復丟失的分割槽。lineage本質上很類似於資料庫中的重做日誌(redo log),只不過這個重做日誌粒度很大,是對全域性資料做同樣的重做進而恢復資料。

lineage

相比其他系統的細顆粒度的記憶體資料更新級別的備份或者log機制,rdd的lineage記錄的是粗顆粒度的特定資料transformation操作(如filter、map、join等)行為。當這個rdd的部分分割槽資料丟失時,它可以通過lineage獲取足夠的資訊來重新運算和恢復丟失的資料分割槽。因為這種粗顆粒的資料模型,限制了spark的運用場合,所以spark並不適用於所有高效能要求的場景,但同時相比細顆粒度的資料模型,也帶來了效能的提公升。

rdd在lineage依賴方面分為兩種:narrow dependencies與shuffle dependencies,用來解決資料容錯的高效性。narrow dependencies是指父rdd的每乙個分割槽最多被乙個子rdd的分割槽所用,表現為乙個父rdd的分割槽對應於乙個子rdd的分割槽或多個父rdd的分割槽對應於乙個子rdd的分割槽,也就是說乙個父rdd的乙個分割槽不可能對應乙個子rdd的多個分割槽。shuffle dependencies是指子rdd的分割槽依賴於父rdd的多個分割槽或所有分割槽,即存在乙個父rdd的乙個分割槽對應乙個子rdd的多個分割槽。

本質理解:根據父rdd分割槽是對應1個還是多個子rdd分割槽來區分narrowdependency(父分割槽對應乙個子分割槽)和shuffle dependency(父分割槽對應多個子分割槽)。如果對應多個,則當容錯重算分割槽時,因為父分割槽資料只有一部分是需要重運算元分割槽的,其餘資料重算就造成了冗餘計算。

如果乙個節點宕機了,而且運算narrow dependency,則只要把丟失的父rdd分割槽重算即可,不依賴於其他節點。而shuffle dependency需要父rdd的所有分割槽都存在,重算就很昂貴了。可以這樣理解開銷的經濟與否:在narrow dependency中,在子rdd的分割槽丟失、重算父rdd分割槽時,父rdd相應分割槽的所有資料都是子rdd分割槽的資料,並不存在冗餘計算。在shuffle dependency情況下,丟失乙個子rdd分割槽重算的每個父rdd的每個分割槽的所有資料並不是都給丟失的子rdd分割槽用的,會有一部分資料相當於對應的是

未丟失的子rdd分割槽中需要的資料,這樣就會產生冗餘計算開銷,這也是shuffledependency開銷更大的原因。因此如果使用checkpoint運算元來做檢查點,不僅要考慮lineage是否足夠長,也要考慮是否有寬依賴,對shuffle dependency加checkpoint是最物有所值的

checkpoint

以下兩種情況下,rdd需要加檢查點。

1)dag中的lineage過長,如果重算,則開銷太大。

2)在shuffle dependency上做checkpoint(檢查點)獲得的收益更大

由於rdd是唯讀的,所以spark的rdd計算中一致性不是主要關心的內容,記憶體相對容易管理

傳統做檢查點有兩種方式:通過冗餘資料和日誌記錄更新操作。在rdd中的docheckpoint方法相當於通過冗餘資料來快取資料,而之前介紹的血統就是通過相當粗粒度的記錄更新操作來實現容錯的

可以通過sparkcontext.setcheckpointdir()設定檢查點資料的儲存路徑,進而將資料儲存備份,然後spark刪除所有已經做檢查點的rdd的祖先rdd依賴。這個操作需要在所有需要對這個rdd所做的操作完成之後再做,因為資料會寫入持久化儲存造成i/o開銷。官方建議,做檢查點的rdd最好是在記憶體中已經快取的rdd,否則儲存這個rdd在持久化的檔案中需要重新計算,產生i/o開銷

Spark容錯機制

一般來說,分布式資料集的容錯性有兩種方式 資料檢查點和記錄資料的更新。面向大規模資料分析,資料檢查點操作成本很高,需要通過資料中心的網路連線在機器之間複製龐大的資料集,而網路頻寬往往比記憶體頻寬低得多,同時還需要消耗更多的儲存資源。因此,spark選擇記錄更新的方式。但是,如果更新粒度太細太多,那麼...

Spark容錯機制

一般來說,分布式資料集的容錯性有兩種方式 資料檢查點和記錄資料的更新。面向大規模資料分析,資料檢查點操作成本很高,需要通過資料中心的網路連線在機器之間複製龐大的資料集,而網路頻寬往往比記憶體頻寬低得多,同時還需要消耗更多的儲存資源。因此,spark選擇記錄更新的方式。但是,如果更新粒度太細太多,那麼...

spark Streaming中的容錯機制

spark操作通常是容錯檔案系統中的資料,比如hdfs.因此,所有通過容錯資料生成的rdd也是容錯的,然而,對於spark streaming來說,這卻是行不通的,因為在大多數情況下,資料都是通過網路接收的,要讓spark streaming程式中,所有生成的rdd,都達到與普通spark程式的rd...