W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
這一節(jié),我們將討論在節(jié)點錯誤事件時Spark Streaming的行為。為了理解這些,讓我們先記住一些Spark RDD的基本容錯語義。
Spark運行在像HDFS或S3等容錯系統(tǒng)的數(shù)據(jù)上。因此,任何從容錯數(shù)據(jù)而來的RDD都是容錯的。然而,這不是在Spark Streaming的情況下,因為Spark Streaming的數(shù)據(jù)大部分情況下是從網(wǎng)絡(luò)中得到的。為了獲得生成的RDD相同的容錯屬性,接收的數(shù)據(jù)需要重復保存在worker node的多個Spark executor上(默認的復制因子是2),這導致了當出現(xiàn)錯誤事件時,有兩類數(shù)據(jù)需要被恢復
有兩種錯誤我們需要關(guān)心
如果所有的輸入數(shù)據(jù)都存在于一個容錯的文件系統(tǒng)如HDFS,Spark Streaming總可以從任何錯誤中恢復并且執(zhí)行所有數(shù)據(jù)。這給出了一個恰好一次(exactly-once)語義,即無論發(fā)生什么故障,所有的數(shù)據(jù)都將會恰好處理一次。
對于基于receiver的輸入源,容錯的語義既依賴于故障的情形也依賴于receiver的類型。正如之前討論的,有兩種類型的receiver
選擇哪種類型的receiver依賴于這些語義。如果一個worker節(jié)點出現(xiàn)故障,Reliable Receiver不會丟失數(shù)據(jù),Unreliable Receiver會丟失接收了但是沒有復制的數(shù)據(jù)。如果driver節(jié)點出現(xiàn)故障,除了以上情況下的數(shù)據(jù)丟失,所有過去接收并復制到內(nèi)存中的數(shù)據(jù)都會丟失,這會影響有狀態(tài)transformation的結(jié)果。
為了避免丟失過去接收的數(shù)據(jù),Spark 1.2引入了一個實驗性的特征write ahead logs
,它保存接收的數(shù)據(jù)到容錯存儲系統(tǒng)中。有了write ahead logs
和Reliable Receiver,我們可以做到零數(shù)據(jù)丟失以及exactly-once語義。
下面的表格總結(jié)了錯誤語義:
Deployment Scenario | Worker Failure | Driver Failure |
---|---|---|
Spark 1.1 或者更早, 沒有write ahead log的Spark 1.2 | 在Unreliable Receiver情況下緩沖數(shù)據(jù)丟失;在Reliable Receiver和文件的情況下,零數(shù)據(jù)丟失 | 在Unreliable Receiver情況下緩沖數(shù)據(jù)丟失;在所有receiver情況下,過去的數(shù)據(jù)丟失;在文件的情況下,零數(shù)據(jù)丟失 |
帶有write ahead log的Spark 1.2 | 在Reliable Receiver和文件的情況下,零數(shù)據(jù)丟失 | 在Reliable Receiver和文件的情況下,零數(shù)據(jù)丟失 |
根據(jù)其確定操作的譜系,所有數(shù)據(jù)都被建模成了RDD,所有的重新計算都會產(chǎn)生同樣的結(jié)果。所有的DStream transformation都有exactly-once語義。那就是說,即使某個worker節(jié)點出現(xiàn)故障,最終的轉(zhuǎn)換結(jié)果都是一樣。然而,輸出操作(如foreachRDD
)具有at-least once
語義,那就是說,在有worker事件故障的情況下,變換后的數(shù)據(jù)可能被寫入到一個外部實體不止一次。利用saveAs***Files
將數(shù)據(jù)保存到HDFS中的情況下,以上寫多次是能夠被接受的(因為文件會被相同的數(shù)據(jù)覆蓋)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: