CGFT《大數(shù)據(jù)技術(shù)原理與應(yīng)用》中的數(shù)據(jù)錯(cuò)誤與恢復(fù)?HDFS具有較高的容錯(cuò)性,可以兼容廉價(jià)的硬件,它把硬件出錯(cuò)看成一種常態(tài),而不是異常,并設(shè)計(jì)了相應(yīng)的機(jī)制檢測(cè)數(shù)據(jù)錯(cuò)誤和進(jìn)行自動(dòng)恢復(fù),主要包括以下幾種情形。
1.名稱節(jié)點(diǎn)出錯(cuò)
名稱節(jié)點(diǎn)保存了所有的元數(shù)據(jù)信息,其中,*核心的兩大數(shù)據(jù)結(jié)構(gòu)是Fslmage和Editlog,如果這兩個(gè)文件發(fā)生損壞,那么整個(gè)HDFS實(shí)例將失效。因此,HDFS設(shè)置了備份機(jī)制,把這些核心文件同步復(fù)制到備份服務(wù)器SecondaryNameNode上,備份服務(wù)器本身不會(huì)處理任何請(qǐng)求,只扮演備份機(jī)的角色,雖然這樣會(huì)增加名稱節(jié)點(diǎn)服務(wù)器的負(fù)擔(dān),但是,可以有效*數(shù)據(jù)的可靠性和系統(tǒng)可用性。當(dāng)名稱節(jié)點(diǎn)出錯(cuò)時(shí),就可以根據(jù)備份服務(wù)器SecondaryNameNode中的Fslmage和Editlog數(shù)據(jù)進(jìn)行恢復(fù)。
2.數(shù)據(jù)節(jié)點(diǎn)出錯(cuò)
每個(gè)數(shù)據(jù)節(jié)點(diǎn)會(huì)定期向名稱節(jié)點(diǎn)發(fā)送“心跳”信息,向名稱節(jié)點(diǎn)報(bào)告自己的狀態(tài)。當(dāng)數(shù)據(jù)節(jié)點(diǎn)發(fā)生故障,或者網(wǎng)絡(luò)發(fā)生斷網(wǎng)時(shí),名稱節(jié)點(diǎn)就無法收到來自一些數(shù)據(jù)節(jié)點(diǎn)的心跳信息,這時(shí),這些數(shù)據(jù)節(jié)點(diǎn)就會(huì)被標(biāo)記為“巖機(jī)”,節(jié)點(diǎn)上面的所有數(shù)據(jù)都會(huì)被標(biāo)記為“不可讀”,名稱節(jié)點(diǎn)不會(huì)再給它們發(fā)送任何I/O請(qǐng)求。這時(shí),有可能出現(xiàn)一種情形,即由于一些數(shù)據(jù)節(jié)點(diǎn)的不可用,會(huì)導(dǎo)致一些數(shù)據(jù)塊的副本數(shù)量小于沉余因子。名稱節(jié)點(diǎn)會(huì)定期檢查這種情況,一旦發(fā)現(xiàn)某個(gè)數(shù)據(jù)塊的副本數(shù)量小于阮余因子,就會(huì)啟動(dòng)數(shù)據(jù)穴余復(fù)制,為它生成新的副本。HDFS和其他分布式文件系統(tǒng)的*區(qū)別就是可以調(diào)整沉余數(shù)據(jù)的位置。
3.數(shù)據(jù)出錯(cuò)
網(wǎng)絡(luò)傳輸和磁盤錯(cuò)誤等因素,都會(huì)造成數(shù)據(jù)錯(cuò)誤??蛻舳嗽谧x取到數(shù)據(jù)后,會(huì)采用md5和shal對(duì)數(shù)據(jù)塊進(jìn)行校驗(yàn),以確定讀取到正確的數(shù)據(jù)。在文件被創(chuàng)建時(shí),客戶端就會(huì)對(duì)每一個(gè)文件塊進(jìn)行信息摘錄,并把這些信息寫入同一個(gè)路徑的隱藏文件里面。當(dāng)客戶端讀取文件的時(shí)候,會(huì)先讀取該信息文件,然后,利用該信息文件對(duì)每個(gè)讀取的數(shù)據(jù)塊進(jìn)行校驗(yàn),如果校驗(yàn)出錯(cuò),客戶端就會(huì)請(qǐng)求到另外一個(gè)數(shù)據(jù)節(jié)點(diǎn)讀取該文件塊,并且向名稱節(jié)點(diǎn)報(bào)告這個(gè)文件塊有錯(cuò)誤,名稱節(jié)點(diǎn)會(huì)定期檢查并且重新復(fù)制這個(gè)塊。