首頁技術(shù)文章正文

RDD數(shù)據(jù)丟失后如何恢復(fù)?RDD容錯(cuò)機(jī)制介紹

更新時(shí)間:2021-03-05 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

RDD是一個(gè)容錯(cuò)的、并行的數(shù)據(jù)結(jié)構(gòu),可以讓用戶顯式地將數(shù)據(jù)存儲(chǔ)到磁盤和內(nèi)存中,并且還能控制數(shù)據(jù)的分區(qū)。對(duì)于迭代式計(jì)算和交互式數(shù)據(jù)挖掘,RDD可以將中間計(jì)算的數(shù)據(jù)結(jié)果保存在內(nèi)存中,當(dāng)Spark集群中的某一個(gè)節(jié)點(diǎn)由于宕機(jī)導(dǎo)致數(shù)據(jù)丟失,就可以通過Spark中的RDD進(jìn)行容錯(cuò)恢復(fù)已經(jīng)丟失的數(shù)據(jù)。RDD提供了兩種故障恢復(fù)的方式,分別是血統(tǒng)(Lineage)方式和設(shè)置檢查點(diǎn)(checkpoint)方式。下面,我們就來介紹一下這兩種方式。

1615520492922_RDD容錯(cuò)機(jī)制.jpg

血統(tǒng)(Lineage)方式,主要是根據(jù)RDD之間的依賴關(guān)系對(duì)丟失數(shù)據(jù)的RDD進(jìn)行數(shù)據(jù)恢復(fù)。如果丟失數(shù)據(jù)的子RDD在進(jìn)行窄依賴運(yùn)算,則只需要把丟失數(shù)據(jù)的父RDD的對(duì)應(yīng)分區(qū)進(jìn)行重新計(jì)算即可,不需要依賴其他的節(jié)點(diǎn),并且在計(jì)算過程中不會(huì)存在冗余計(jì)算;若丟失數(shù)據(jù)的RDD進(jìn)行寬依賴運(yùn)算,則需要父RDD的所有分區(qū)都要進(jìn)行從頭到尾的計(jì)算,在計(jì)算過程中會(huì)存在冗余計(jì)算。為了解決寬依賴運(yùn)算中出現(xiàn)的計(jì)算冗余問題,Spark又提供了另一種方式進(jìn)行數(shù)據(jù)容錯(cuò),即設(shè)置檢查點(diǎn)(checkpoint)方式。

設(shè)置檢查點(diǎn)(checkPoint)方式,本質(zhì)上是將RDD寫入磁盤進(jìn)行存儲(chǔ)。當(dāng)RDD在進(jìn)行寬依賴運(yùn)算時(shí),只需要在中間階段設(shè)置一個(gè)檢查點(diǎn)進(jìn)行容錯(cuò),即通過Spark中的sparkContext對(duì)象調(diào)用setCheckpoint()方法,設(shè)置一個(gè)容錯(cuò)文件系統(tǒng)目錄(如HDFS)作為檢查點(diǎn)checkpoint,將checkpoint的數(shù)據(jù)寫入之前設(shè)置的容錯(cuò)文件系統(tǒng)中進(jìn)行高可用的持久化存儲(chǔ),若是后面有節(jié)點(diǎn)出現(xiàn)宕機(jī)導(dǎo)致分區(qū)數(shù)據(jù)丟失,則可以從做檢查點(diǎn)的RDD開始重新計(jì)算即可,不需要進(jìn)行從頭到尾的計(jì)算,這樣就會(huì)減少開銷。



猜你喜歡:
不同系統(tǒng)如何加載數(shù)據(jù)創(chuàng)建RDD

RDD為什么要進(jìn)行數(shù)據(jù)持久化?它的操作方法有哪些?

Spark的集群安裝部署【大數(shù)據(jù)技術(shù)文章】

黑馬程序員大數(shù)據(jù)培訓(xùn)課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!