這篇文章主要講解了“HDFS是怎么做文件管理和容錯(cuò)的”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“HDFS是怎么做文件管理和容錯(cuò)的”吧!
瀍河ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話(huà)聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
HDFS 會(huì)將數(shù)據(jù)文件切分成一個(gè)個(gè)小的數(shù)據(jù)塊進(jìn)行存儲(chǔ),同時(shí)會(huì)將這些數(shù)據(jù)塊的副本保存多份,分別保存到不同的 DataNode 上。HDFS 中數(shù)據(jù)塊的副本數(shù)由 hdfs-site.xml
文件中的dfs.replication
屬性決定,配置屬性如下:
<property> <name>dfs.replication</name> <value>3</value></property>
Hadoop 默認(rèn)的副本數(shù)為3,并且在機(jī)架的存放上也有一定的策略。Hadoop 的默認(rèn)布局策略,即默認(rèn)的副本存放策略如下:
(1)第 1 個(gè)副本存放在 HDFS 客戶(hù)端所在的節(jié)點(diǎn)上。
(2)第 2 個(gè)副本存放在與第1個(gè)副本不同的機(jī)架上,并且是隨機(jī)選擇的節(jié)點(diǎn)。
(3)第 3 個(gè)副本存放在與第2個(gè)副本相同的機(jī)架上,并且是不同的節(jié)點(diǎn)。
HDFS 的數(shù)據(jù)讀取過(guò)程需要客戶(hù)端先訪問(wèn) NameNode,獲取元數(shù)據(jù)信息,然后到具體的 DataNode 上讀取數(shù)據(jù),如下圖所示:
(1)客戶(hù)端向NameNode發(fā)起請(qǐng)求,讀取元數(shù)據(jù)信息。NameNode上存儲(chǔ)著整個(gè)HDFS集群的元數(shù)據(jù)信息,這些元數(shù)據(jù)信息包括文件名,所有者,所在組,權(quán)限,數(shù)據(jù)塊和 DataNode列表。
這個(gè)過(guò)程中還要對(duì)客戶(hù)端的身份信息進(jìn)行驗(yàn)證,同時(shí)檢測(cè)是否存在要讀取的文件,并且需要驗(yàn)證客戶(hù)端的身份是否具有訪問(wèn)權(quán)限。
(2)NameNode 將相關(guān)的元數(shù)據(jù)信息返回給客戶(hù)端。
(3)客戶(hù)端到指定的 DataNode 上讀取相應(yīng)的數(shù)據(jù)塊。
(4)DataNode 返回相應(yīng)的數(shù)據(jù)塊信息。
第(3)和(4)步會(huì)持續(xù)進(jìn)行,一直到文件的所有數(shù)據(jù)塊都讀取完畢或者 HDFS 客戶(hù)端主動(dòng)關(guān)閉了文件流為止。
HDFS 中的數(shù)據(jù)寫(xiě)入過(guò)程同樣需要客戶(hù)端先訪問(wèn) NameNode,獲取元數(shù)據(jù)信息,然后到具體的 DataNode 上寫(xiě)入數(shù)據(jù),如圖所示
以下是具體步驟:
(1)客戶(hù)端請(qǐng)求 NameNode 獲取元數(shù)據(jù)信息。這個(gè)過(guò)程中,NameNode 要對(duì)客戶(hù)端的省份信息進(jìn)行驗(yàn)證,同時(shí)需要驗(yàn)證客戶(hù)端的身份是否具有寫(xiě)權(quán)限。
(2)NameNode 返回相應(yīng)的元數(shù)據(jù)信息給客戶(hù)端。
(3)客戶(hù)端向第一個(gè) DataNode 寫(xiě)數(shù)據(jù)。
(4)第 1 個(gè) DataNode 向第 2 個(gè) DataNode 寫(xiě)數(shù)據(jù)。
(5)第 2 個(gè) DataNode 向第 3 個(gè) DataNode 寫(xiě)數(shù)據(jù)。
(6)第 3 個(gè) DataNode 向第 2 個(gè) DataNode 返回確認(rèn)結(jié)果信息。
(7)第 2 個(gè) DataNode 向第 1 個(gè) DataNode 返回確認(rèn)結(jié)果信息。
(8)第 1 個(gè) DataNode 向客戶(hù)端返回確認(rèn)結(jié)果信息。
其中,第(4)步和第(5)步是異步執(zhí)行的,當(dāng) HDFS 中的多個(gè) DataNode 發(fā)生故障或者發(fā)生錯(cuò)誤時(shí),只要正確寫(xiě)入了滿(mǎn)足最少數(shù)目要求的數(shù)據(jù)副本數(shù),HDFS客戶(hù)端就可以從數(shù)據(jù)塊的副本中恢復(fù)數(shù)據(jù)。
最少數(shù)目要求的數(shù)據(jù)副本數(shù)由hdfs-site.xml
文件中的dfs.namenode.replication.min
屬性決定,配置屬性如下:
<property> <name>dfs.namenode.replication.min</name> <value>1</value></property>
最少數(shù)目要求的數(shù)據(jù)副本數(shù)默認(rèn)為1,即只要正確寫(xiě)入了數(shù)據(jù)的一個(gè)副本,客戶(hù)端就可以從數(shù)據(jù)副本中恢復(fù)數(shù)據(jù)。
通常,在校驗(yàn)數(shù)據(jù)是否損壞時(shí)可以用如下方式。
(1)當(dāng)數(shù)據(jù)第一次引入時(shí),計(jì)算校驗(yàn)和,
(2)當(dāng)數(shù)據(jù)經(jīng)過(guò)一系列的傳輸或者復(fù)制時(shí),再次計(jì)算校驗(yàn)和。
(3)對(duì)比第(1)和第(2)步的校驗(yàn)和是否一致,如果兩次數(shù)據(jù)的校驗(yàn)和不一致,則證明數(shù)據(jù)已經(jīng)被破壞。
注意:這種使用校驗(yàn)和來(lái)驗(yàn)證數(shù)據(jù)的技術(shù)只能檢測(cè)數(shù)據(jù)是否被損壞,并不能修復(fù)數(shù)據(jù)。
HDFS中校驗(yàn)數(shù)據(jù)是否損壞使用的也是校驗(yàn)和技術(shù),無(wú)論是進(jìn)行數(shù)據(jù)的寫(xiě)入還是進(jìn)行數(shù)據(jù)的讀取,都會(huì)驗(yàn)證數(shù)據(jù)的校驗(yàn)和。校驗(yàn)和的字節(jié)數(shù)由core-site.xml
文件中的io.bytes.per.checksum
屬性指定,默認(rèn)的字節(jié)長(zhǎng)度為 512 B,具體配置如下:
<property> <name>io.bytes.per.checksum</name> <value>512</value></property>
當(dāng) HDFS 寫(xiě)數(shù)據(jù)時(shí),HDFS 客戶(hù)端會(huì)將要寫(xiě)入的數(shù)據(jù)及對(duì)應(yīng)數(shù)據(jù)的校驗(yàn)和發(fā)送到 DataNode 組成的復(fù)制管道中,其中最后一個(gè) DataNode 負(fù)責(zé)驗(yàn)證數(shù)據(jù)的校驗(yàn)和是否一致。如果檢測(cè)到校驗(yàn)和與 HDFS 客戶(hù)端發(fā)送的校驗(yàn)和不一致,則 HDFS 客戶(hù)端 會(huì)收到校驗(yàn)和異常的信息,可以在程序中捕獲到這個(gè)異常,進(jìn)行相應(yīng)的處理,如重新寫(xiě)入數(shù)據(jù)或者用其他方式處理。
HDFS 讀數(shù)據(jù)時(shí)也會(huì)驗(yàn)證校驗(yàn)和,此時(shí)會(huì)將它們與 DataNode 中存儲(chǔ)的校驗(yàn)和進(jìn)行比較。如果其與 DataNode 中存儲(chǔ)的校驗(yàn)和不一致,則說(shuō)明數(shù)據(jù)已經(jīng)損壞,需要重新從其他 DataNode 讀取數(shù)據(jù)。其中,每個(gè) DataNode 都會(huì)保存一個(gè)校驗(yàn)和日志,客戶(hù)端成功驗(yàn)證一個(gè)數(shù)據(jù)塊之后,DataNode會(huì)更新該校驗(yàn)和日志。
除此之外,每個(gè) DataNode 也會(huì)在后臺(tái)運(yùn)行一個(gè)掃描器(DataBlockScanner),定期驗(yàn)證存儲(chǔ)在這個(gè) DataNode 上的所有數(shù)據(jù)塊。
由于 HDFS提供的數(shù)據(jù)塊副本機(jī)制,當(dāng)一個(gè)數(shù)據(jù)塊損壞時(shí),HDFS 能夠自動(dòng)復(fù)制其他完好的數(shù)據(jù)塊來(lái)修復(fù)損壞的數(shù)據(jù)塊,得到一個(gè)新的,完好的數(shù)據(jù)塊,以達(dá)到系統(tǒng)設(shè)置的副本數(shù)要求,因此在某些數(shù)據(jù)塊出現(xiàn)損壞時(shí),保證了數(shù)據(jù)的完整性。
HDFS 的容錯(cuò)機(jī)制大體上可以分為兩個(gè)方面:文件系統(tǒng)的容錯(cuò)和 Hadoop 自身的容錯(cuò)。
文件系統(tǒng)的容錯(cuò)可以通過(guò) NameNode 高可用、SecondaryNameNode 機(jī)制、數(shù)據(jù)塊副本機(jī)制和心跳機(jī)制來(lái)實(shí)現(xiàn)。
注意:當(dāng)以本地模式或者偽集群模式部署 Hadoop 時(shí),會(huì)存在 SeconddayNameNode;當(dāng)以集群模式部署 Hadoop 時(shí),如果配置了 NameNode 的 HA 機(jī)制,則不會(huì)存在 SecondaryNameNode,此時(shí)會(huì)存在備 NameNode。
在這里重點(diǎn)說(shuō)下集群模式下 HDFS 的容錯(cuò),有關(guān) SecondaryNameNode 機(jī)制可參見(jiàn)上一篇文章《前方高能 | HDFS 的架構(gòu),你吃透了嗎?》的說(shuō)明:
HDFS 的容錯(cuò)機(jī)制如圖所示:
具體的流程如下:
(1)備 NameNode 實(shí)時(shí)備份主 NameNode 上的元數(shù)據(jù)信息,一旦主 NameNode 發(fā)生故障不可用,則備 NameNode 迅速接管主 NameNode 的工作。
(2)客戶(hù)端向 NameNode 讀取元數(shù)據(jù)信息。
(3)NameNode 向客戶(hù)端返回元數(shù)據(jù)信息。
(4)客戶(hù)端向 DataNode 讀取/寫(xiě)入 數(shù)據(jù),此時(shí)會(huì)分為讀取數(shù)據(jù)和寫(xiě)入數(shù)據(jù)兩種情況。
① 讀取數(shù)據(jù):HDFS 會(huì)檢測(cè)文件塊的完整性,確認(rèn)文件塊的檢驗(yàn)和是否一致,如果不一致,則從其他的 DataNode 上獲取相應(yīng)的副本。
② 寫(xiě)入數(shù)據(jù):HDFS 會(huì)檢測(cè)文件塊的完整性,同時(shí)記錄新創(chuàng)建的文件的所有文件塊的校驗(yàn)和。
(5) DataNode 會(huì)定期向 NameNode 發(fā)送心跳信息,將自身節(jié)點(diǎn)的狀態(tài)告知 NameNode;NameNode 會(huì)將 DataNode 需要執(zhí)行的命令放入心跳信息的返回結(jié)果中,返回給 DataNode 執(zhí)行。
當(dāng) DataNode 發(fā)生故障沒(méi)有正常發(fā)送心跳信息時(shí),NameNode 會(huì)檢測(cè)文件塊的副本數(shù)是否小于 系統(tǒng)設(shè)置值,如果小于設(shè)置值,則自動(dòng)復(fù)制新的副本并分發(fā)到其他的 DataNode 上。
(6)集群中有數(shù)據(jù)關(guān)聯(lián)的 DataNode 之間復(fù)制數(shù)據(jù)副本。
當(dāng)集群中的 DataNode 發(fā)生故障而失效,或者在集群中添加新的 DataNode 時(shí),可能會(huì)導(dǎo)致數(shù)據(jù)分布不均勻。當(dāng)某個(gè) DataNode 上的空閑空間資源大于系統(tǒng)設(shè)置的臨界值時(shí),HDFS 就會(huì)從 其他的 DataNode 上將數(shù)據(jù)遷移過(guò)來(lái)。相對(duì)地,如果某個(gè) DataNode 上的資源出現(xiàn)超負(fù)荷運(yùn)載,HDFS 就會(huì)根據(jù)一定的規(guī)則尋找有空閑資源的 DataNode,將數(shù)據(jù)遷移過(guò)去。
還有一種從側(cè)面說(shuō)明 HDFS 支持容錯(cuò)的機(jī)制,即當(dāng)從 HDFS 中刪除數(shù)據(jù)時(shí),數(shù)據(jù)并不是馬上就會(huì)從 HDFS 中被刪除,而是會(huì)將這些數(shù)據(jù)放到“回收站”目錄中,隨時(shí)可以恢復(fù),直到超過(guò)了一定的時(shí)間才會(huì)真正刪除這些數(shù)據(jù)。
Hadoop 自身的容錯(cuò)理解起來(lái)比較簡(jiǎn)單,當(dāng)升級(jí) Hadoop 系統(tǒng)時(shí),如果出現(xiàn) Hadoop 版本不兼容的問(wèn)題,可以通過(guò)回滾 Hadoop 版本的方式來(lái)實(shí)現(xiàn)自身的容錯(cuò)。
感謝各位的閱讀,以上就是“HDFS是怎么做文件管理和容錯(cuò)的”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)HDFS是怎么做文件管理和容錯(cuò)的這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
新聞名稱(chēng):HDFS是怎么做文件管理和容錯(cuò)的
本文網(wǎng)址:http://chinadenli.net/article12/pigcgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)、App開(kāi)發(fā)、面包屑導(dǎo)航、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)