溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

HDFS是怎么做文件管理和容錯的

發(fā)布時間:2021-07-16 09:56:03 來源:億速云 閱讀:223 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“HDFS是怎么做文件管理和容錯的”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“HDFS是怎么做文件管理和容錯的”吧!


HDFS 文件管理

1、HDFS 的塊分布

        HDFS 會將數(shù)據(jù)文件切分成一個個小的數(shù)據(jù)塊進行存儲,同時會將這些數(shù)據(jù)塊的副本保存多份,分別保存到不同的 DataNode 上。HDFS 中數(shù)據(jù)塊的副本數(shù)由 hdfs-site.xml文件中的dfs.replication屬性決定,配置屬性如下:

<property> <name>dfs.replication</name> <value>3</value></property>

        Hadoop 默認的副本數(shù)為3,并且在機架的存放上也有一定的策略。Hadoop 的默認布局策略,即默認的副本存放策略如下:

        (1)第 1 個副本存放在 HDFS 客戶端所在的節(jié)點上。

        (2)第 2 個副本存放在與第1個副本不同的機架上,并且是隨機選擇的節(jié)點。

        (3)第 3 個副本存放在與第2個副本相同的機架上,并且是不同的節(jié)點。

2、數(shù)據(jù)讀取

        HDFS 的數(shù)據(jù)讀取過程需要客戶端先訪問 NameNode,獲取元數(shù)據(jù)信息,然后到具體的 DataNode 上讀取數(shù)據(jù),如下圖所示:

HDFS是怎么做文件管理和容錯的
        (1)客戶端向NameNode發(fā)起請求,讀取元數(shù)據(jù)信息。NameNode上存儲著整個HDFS集群的元數(shù)據(jù)信息,這些元數(shù)據(jù)信息包括文件名,所有者,所在組,權(quán)限,數(shù)據(jù)塊和 DataNode列表

        這個過程中還要對客戶端的身份信息進行驗證,同時檢測是否存在要讀取的文件,并且需要驗證客戶端的身份是否具有訪問權(quán)限。

        (2)NameNode 將相關(guān)的元數(shù)據(jù)信息返回給客戶端

        (3)客戶端到指定的 DataNode 上讀取相應(yīng)的數(shù)據(jù)塊。

        (4)DataNode 返回相應(yīng)的數(shù)據(jù)塊信息。

        第(3)和(4)步會持續(xù)進行,一直到文件的所有數(shù)據(jù)塊都讀取完畢或者 HDFS 客戶端主動關(guān)閉了文件流為止。

3、數(shù)據(jù)寫入

        HDFS 中的數(shù)據(jù)寫入過程同樣需要客戶端先訪問 NameNode,獲取元數(shù)據(jù)信息,然后到具體的 DataNode 上寫入數(shù)據(jù),如圖所示

HDFS是怎么做文件管理和容錯的

        以下是具體步驟:

        (1)客戶端請求 NameNode 獲取元數(shù)據(jù)信息。這個過程中,NameNode 要對客戶端的省份信息進行驗證,同時需要驗證客戶端的身份是否具有寫權(quán)限。

        (2)NameNode 返回相應(yīng)的元數(shù)據(jù)信息給客戶端。

        (3)客戶端向第一個 DataNode 寫數(shù)據(jù)。

        (4)第 1 個 DataNode 向第 2 個 DataNode 寫數(shù)據(jù)。

        (5)第 2 個 DataNode 向第 3 個 DataNode 寫數(shù)據(jù)

        (6)第 3 個 DataNode 向第 2 個 DataNode 返回確認結(jié)果信息。

        (7)第 2 個 DataNode 向第 1 個 DataNode 返回確認結(jié)果信息。

        (8)第 1 個 DataNode 向客戶端返回確認結(jié)果信息

        其中,第(4)步和第(5)步是異步執(zhí)行的,當 HDFS 中的多個 DataNode 發(fā)生故障或者發(fā)生錯誤時,只要正確寫入了滿足最少數(shù)目要求的數(shù)據(jù)副本數(shù),HDFS客戶端就可以從數(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ù)默認為1,即只要正確寫入了數(shù)據(jù)的一個副本,客戶端就可以從數(shù)據(jù)副本中恢復(fù)數(shù)據(jù)。

4、數(shù)據(jù)完整性

        通常,在校驗數(shù)據(jù)是否損壞時可以用如下方式。

        (1)當數(shù)據(jù)第一次引入時,計算校驗和

        (2)當數(shù)據(jù)經(jīng)過一系列的傳輸或者復(fù)制時,再次計算校驗和。

        (3)對比第(1)和第(2)步的校驗和是否一致,如果兩次數(shù)據(jù)的校驗和不一致,則證明數(shù)據(jù)已經(jīng)被破壞。

注意:這種使用校驗和來驗證數(shù)據(jù)的技術(shù)只能檢測數(shù)據(jù)是否被損壞,并不能修復(fù)數(shù)據(jù)。

        HDFS中校驗數(shù)據(jù)是否損壞使用的也是校驗和技術(shù),無論是進行數(shù)據(jù)的寫入還是進行數(shù)據(jù)的讀取,都會驗證數(shù)據(jù)的校驗和。校驗和的字節(jié)數(shù)由core-site.xml文件中的io.bytes.per.checksum屬性指定,默認的字節(jié)長度為 512 B,具體配置如下:

<property> <name>io.bytes.per.checksum</name> <value>512</value></property>

        當 HDFS 寫數(shù)據(jù)時,HDFS 客戶端會將要寫入的數(shù)據(jù)及對應(yīng)數(shù)據(jù)的校驗和發(fā)送到 DataNode 組成的復(fù)制管道中,其中最后一個 DataNode 負責驗證數(shù)據(jù)的校驗和是否一致。如果檢測到校驗和與 HDFS 客戶端發(fā)送的校驗和不一致,則 HDFS 客戶端 會收到校驗和異常的信息,可以在程序中捕獲到這個異常,進行相應(yīng)的處理,如重新寫入數(shù)據(jù)或者用其他方式處理。

        HDFS 讀數(shù)據(jù)時也會驗證校驗和,此時會將它們與 DataNode 中存儲的校驗和進行比較。如果其與 DataNode 中存儲的校驗和不一致,則說明數(shù)據(jù)已經(jīng)損壞,需要重新從其他 DataNode 讀取數(shù)據(jù)。其中,每個 DataNode 都會保存一個校驗和日志,客戶端成功驗證一個數(shù)據(jù)塊之后,DataNode會更新該校驗和日志

        除此之外,每個 DataNode 也會在后臺運行一個掃描器(DataBlockScanner),定期驗證存儲在這個 DataNode 上的所有數(shù)據(jù)塊。

        由于 HDFS 提供的數(shù)據(jù)塊副本機制,當一個數(shù)據(jù)塊損壞時,HDFS 能夠自動復(fù)制其他完好的數(shù)據(jù)塊來修復(fù)損壞的數(shù)據(jù)塊,得到一個新的,完好的數(shù)據(jù)塊,以達到系統(tǒng)設(shè)置的副本數(shù)要求,因此在某些數(shù)據(jù)塊出現(xiàn)損壞時,保證了數(shù)據(jù)的完整性。

5、 HDFS 容錯

        HDFS 的容錯機制大體上可以分為兩個方面:文件系統(tǒng)的容錯和 Hadoop 自身的容錯。

5.1 文件系統(tǒng)的容錯

        文件系統(tǒng)的容錯可以通過 NameNode 高可用、SecondaryNameNode 機制、數(shù)據(jù)塊副本機制和心跳機制來實現(xiàn)。

注意:當以本地模式或者偽集群模式部署 Hadoop 時,會存在 SeconddayNameNode;當以集群模式部署 Hadoop 時,如果配置了 NameNode 的 HA 機制,則不會存在 SecondaryNameNode,此時會存在備 NameNode。

        在這里重點說下集群模式下 HDFS 的容錯,有關(guān) SecondaryNameNode 機制可參見上一篇文章《前方高能 | HDFS 的架構(gòu),你吃透了嗎?》的說明:

        HDFS 的容錯機制如圖所示:

HDFS是怎么做文件管理和容錯的
        具體的流程如下:

        (1)備 NameNode 實時備份主 NameNode 上的元數(shù)據(jù)信息,一旦主 NameNode 發(fā)生故障不可用,則備 NameNode 迅速接管主 NameNode 的工作。

        (2)客戶端向 NameNode 讀取元數(shù)據(jù)信息。

        (3)NameNode 向客戶端返回元數(shù)據(jù)信息。

        (4)客戶端向 DataNode 讀取/寫入 數(shù)據(jù),此時會分為讀取數(shù)據(jù)和寫入數(shù)據(jù)兩種情況。

        ① 讀取數(shù)據(jù):HDFS 會檢測文件塊的完整性,確認文件塊的檢驗和是否一致,如果不一致,則從其他的 DataNode 上獲取相應(yīng)的副本。

        ② 寫入數(shù)據(jù):HDFS 會檢測文件塊的完整性,同時記錄新創(chuàng)建的文件的所有文件塊的校驗和。

        (5) DataNode 會定期向 NameNode 發(fā)送心跳信息,將自身節(jié)點的狀態(tài)告知 NameNode;NameNode 會將 DataNode 需要執(zhí)行的命令放入心跳信息的返回結(jié)果中,返回給 DataNode 執(zhí)行。

        當 DataNode 發(fā)生故障沒有正常發(fā)送心跳信息時,NameNode 會檢測文件塊的副本數(shù)是否小于 系統(tǒng)設(shè)置值,如果小于設(shè)置值,則自動復(fù)制新的副本并分發(fā)到其他的 DataNode 上。

        (6)集群中有數(shù)據(jù)關(guān)聯(lián)的 DataNode 之間復(fù)制數(shù)據(jù)副本。

        當集群中的 DataNode 發(fā)生故障而失效,或者在集群中添加新的 DataNode 時,可能會導致數(shù)據(jù)分布不均勻當某個 DataNode 上的空閑空間資源大于系統(tǒng)設(shè)置的臨界值時,HDFS 就會從 其他的 DataNode 上將數(shù)據(jù)遷移過來。相對地,如果某個 DataNode 上的資源出現(xiàn)超負荷運載,HDFS 就會根據(jù)一定的規(guī)則尋找有空閑資源的 DataNode,將數(shù)據(jù)遷移過去

        還有一種從側(cè)面說明 HDFS 支持容錯的機制,即當從 HDFS 中刪除數(shù)據(jù)時,數(shù)據(jù)并不是馬上就會從 HDFS 中被刪除,而是會將這些數(shù)據(jù)放到“回收站”目錄中,隨時可以恢復(fù),直到超過了一定的時間才會真正刪除這些數(shù)據(jù)。

5.2 Hadoop自身的容錯

        Hadoop 自身的容錯理解起來比較簡單,當升級 Hadoop 系統(tǒng)時,如果出現(xiàn) Hadoop 版本不兼容的問題,可以通過回滾 Hadoop 版本的方式來實現(xiàn)自身的容錯。      

感謝各位的閱讀,以上就是“HDFS是怎么做文件管理和容錯的”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對HDFS是怎么做文件管理和容錯的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI