HDFS的特性以及如何保证数据的一致性
鏈接:https://www.nowcoder.com/questionTerminal/962225fa78e74ba7b1d7d7792407acc6?orderByHotValue=1&mutiTagIds=629&page=1&onlyReference=false
?
主要有以下6點:
1.安全模式:
HDFS剛啟動時,namenode進(jìn)入安全模式,處于安全模式的namenode不能做任何的文件***作,甚至內(nèi)部的副本創(chuàng)建也是不允許的,namenode此時需要和各個datanode通信,獲得datanode存儲的數(shù)據(jù)塊信息,并對數(shù)據(jù)塊信息進(jìn)行檢查,只有通過了namenode的檢查,一個數(shù)據(jù)塊才被認(rèn)為是安全的。當(dāng)認(rèn)為安全的數(shù)據(jù)塊所占比例達(dá)到了某個閾值,namenode才會啟動。
2.SecondaryNamenode:
Hadoop中使用SecondaryNameNode來備份namenode的元數(shù)據(jù),以便在namenode失效時能從SecondaryNameNode恢復(fù)出namenode上的元數(shù)據(jù)。SecondaryNameNode充當(dāng)namenode的一個副本,它本身并不處理任何請求,因為處理這些請求都是NameNode的責(zé)任。
namenode中保存了整個文件系統(tǒng)的元數(shù)據(jù),而SecondaryNameNode的作用就是周期性(周期長短也可配)保存NameNode的元數(shù)據(jù)。這些源數(shù)據(jù)中包括文件鏡像數(shù)據(jù)FSImage和編輯日志EditLog。FSImage相當(dāng)于HDFS的檢查點,namenode啟動時候會讀取FSImage的內(nèi)容到內(nèi)存,并將其與EditLog日志中的所有修改信息合并生成新的FSImage;在namenode
運行過程中,所有關(guān)于HDFS的修改都將寫入EditLog。這樣,如果namenode失效,可以通過SecondaryNameNode中保存的FSImage和EditLog數(shù)據(jù)恢復(fù)出namenode最近的狀態(tài),盡量減少損失。
3.心跳機(jī)制和副本重新創(chuàng)建
為了保證namenode和各個datanode的聯(lián)系,HDFS采用了心跳機(jī)制。位于整個HDFS核心的namenode,通過周期性的活動來檢查datanode的活性,像跳動的心臟一樣。Namenode周期性向各個datanode發(fā)送心跳包,而收到心跳包的datanode要進(jìn)行回復(fù)。因為心跳包是定時發(fā)送的,所以namenode就把要執(zhí)行的命令也通過心跳包發(fā)送給datanode,而datanode收到心跳包,一方面回復(fù)namenode,另一方面就開始了用戶或者應(yīng)用的數(shù)據(jù)傳輸。
如果偵測到datanode失效,namenode之前保存在這個datanode上的數(shù)據(jù)就變成不可用數(shù)據(jù)。如果有的副本存儲在失效的datanode上,則需要重新創(chuàng)建這個副本,放到另外可用的地方。
4.數(shù)據(jù)一致性:
??一般來講,datanode與應(yīng)用交互的大部分情況都是通過網(wǎng)絡(luò)進(jìn)行的,而網(wǎng)絡(luò)數(shù)據(jù)傳輸帶來的一大問題就是數(shù)據(jù)是否原樣到達(dá)。為了保證數(shù)據(jù)的一致性,HDFS采用了數(shù)據(jù)校驗和(checkSum)機(jī)制。創(chuàng)建文件時,HDFS會為這個文件生成一個校驗和,校驗和文件和文件本身保存在同一空間中。傳輸數(shù)據(jù)時會將數(shù)據(jù)與校驗數(shù)據(jù)和一同傳輸,應(yīng)用收到數(shù)據(jù)后可以進(jìn)行校驗,如果兩個校驗的結(jié)果不同,則文件肯定出錯了,這個數(shù)據(jù)塊就變成無效的。如果判定無效,則需要從其他datanode上讀取副本。
5.租約:
??在linux中,為了防止多個進(jìn)程向同一個文件寫數(shù)據(jù)的情況,采用了文件加鎖的機(jī)制。而在HDFS中,同樣需要一個機(jī)制來防止同一個文件被多個人寫入數(shù)據(jù)。這種機(jī)制就是租約(Lease),每當(dāng)寫入數(shù)據(jù)之前,一個客戶端必須獲得namenode發(fā)放的一個租約。Namenode保證同一個文件只發(fā)放一個允許寫的租約。那么就可以有效防止多人寫入的情況。
6.回滾:
??HDFS安裝或升級時,會將當(dāng)前的版本信息保存起來,如果升級一段時間內(nèi)運行正常,可以認(rèn)為這次升級沒有問題,重新保存版本信息,否則,根據(jù)保存的舊版本信息,將HDFS恢復(fù)至之前的版本。
總結(jié)
以上是生活随笔為你收集整理的HDFS的特性以及如何保证数据的一致性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 详解AST抽象语法树
- 下一篇: unity如何实现图片透视_unity