Spark Streaming揭秘 Day13 数据安全容错(Driver篇)
Spark Streaming揭秘 Day13
數(shù)據(jù)安全容錯(cuò)(Driver篇)
書接上回,首先我們要考慮的是在Driver層面,有哪些東西需要維持狀態(tài),只有在需要維持狀態(tài)的情況下才需要容錯(cuò),總的來說,一共有三個(gè)組件需要容錯(cuò):
- 數(shù)據(jù)層面:ReceiverBlockTracker,專門負(fù)責(zé)管理整個(gè)SparkStreaming運(yùn)行數(shù)據(jù)的元數(shù)據(jù),主要用來跟蹤數(shù)據(jù),需要狀態(tài)。
- 邏輯層面:DStream和DStreamGraph,表達(dá)依賴關(guān)系,在恢復(fù)的時(shí)候需要恢復(fù)計(jì)算邏輯級別的依賴關(guān)系。
- 作業(yè)生成層面:JobGenerator,表明正在怎么基于RBT和DStreams的關(guān)系生成作業(yè),消費(fèi)了哪些數(shù)據(jù),進(jìn)行到了哪些程度,都需要容錯(cuò)。
在Driver層面,主要也是采用checkpoint和WAL兩個(gè)容錯(cuò)機(jī)制。
ReceiverBlockTracker容錯(cuò)
ReceiverBlockTracker,會管理SparkStreaming運(yùn)行過程中的所有數(shù)據(jù),指針指向具體數(shù)據(jù)。所有操作都會保存在WAL中,所以當(dāng)失敗后可以恢復(fù)。
在ReceiverBlockTracker中,核心是如下的兩個(gè)數(shù)據(jù)結(jié)構(gòu):
- 未分配隊(duì)列streamIdToUnallocatedBlockQueues:存儲所有已接收但是還沒有分配給具體Batch的Block,會被具體Receiver調(diào)用。
- 已分配隊(duì)列timeToAllocatedBlocks:表示已分配的Block,會被JobGenerator調(diào)用。需要注意的是,這是個(gè)HashMap,所以可以存很多Batch Duration的Blocks,可以支持window或者state操作。
所以,我們可以圍繞數(shù)據(jù)的三個(gè)階段展開:
階段一:addBlock方法主要負(fù)責(zé)收集數(shù)據(jù)寫入未分配隊(duì)列
我們可以看到,當(dāng)收到Executor端傳過來的數(shù)據(jù),第一步通過writeToLog方法進(jìn)行元數(shù)據(jù)的容錯(cuò)處理。需要注意,在這里并沒有判斷啥調(diào)用條件,具體的容錯(cuò)方式是在writeToLog方法內(nèi)部判斷的。
階段二:allocateBlocksToBatch方法主要負(fù)責(zé)將未分配隊(duì)列數(shù)據(jù)寫入已分配隊(duì)列
在獲取所有未分配數(shù)據(jù)的時(shí)候,采用dequeue方法,其中隱含的會進(jìn)行一個(gè)union操作,按照streamID(表示不同的輸入數(shù)據(jù)來源)進(jìn)行匯總。
同時(shí),在獲取數(shù)據(jù)后,首先做writeToLog,在成功寫入WAL之后,才會把元數(shù)據(jù)放入已分配隊(duì)列中。
階段三:CleanUpOldBatchs將過期數(shù)據(jù)進(jìn)行銷毀
我們可以看到,在實(shí)際執(zhí)行銷毀前,也會調(diào)用writeToLog進(jìn)行災(zāi)備。
綜上所述,在數(shù)據(jù)管理層面,數(shù)據(jù)生成、消費(fèi)、銷毀的時(shí)候都做災(zāi)備!!!
writeToLog
這是進(jìn)行容錯(cuò)的核心方法,方法本身也是比較簡潔的。
首先,會通過isWriteAheadLogEnabled方法進(jìn)行備份方式在判斷,我們發(fā)現(xiàn),其最終是調(diào)用了如下的方法。可以看到其核心就是使用到了checkpoint目錄,也就是說備份其實(shí)是基于checkpoint機(jī)制進(jìn)行的。
實(shí)際備份其實(shí)就是以WAL的方法進(jìn)行文件寫入,writeToLog目前程序出錯(cuò)時(shí)可以recover,但是程序升級時(shí)不行,可以通過覆寫代碼,將WAL保存在其他的地方。
總結(jié)來說,checkpoint提供了數(shù)據(jù)的存放位置,而WAL則是具體的數(shù)據(jù)組織方法。
欲知后事如何,且聽下回分解
DT大數(shù)據(jù)每天晚上20:00YY頻道現(xiàn)場授課頻道68917580
轉(zhuǎn)載于:https://www.cnblogs.com/dt-zhw/p/5514949.html
總結(jié)
以上是生活随笔為你收集整理的Spark Streaming揭秘 Day13 数据安全容错(Driver篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 回到顶部和回到底部动画
- 下一篇: framework中编译anroid工程