HDFS架構和實現機制簡介

文章來源:加米穀大數據

本文將對 HDFS 的整體架構和基本實現機制進行簡單介紹。

HDFS 整體架構

HDFS 是一個主從 Master/Slave 架構。一個 HDFS 集群包含一個 NameNode,這是一個 Master Server,用來管理文件系統的命名空間,以及調節客戶端對文件的訪問。一個 HDFS 集群還包括多個 DataNode,用來存儲數據。HDFS 的整體結構如圖 1 所示。

HDFS架構和實現機制簡介

圖 1 HDFS整體架構

HDFS 會對外暴露一個文件系統命名空間,並允許用戶數據以文件的形式進行存儲。在內部,一個文件被分成多個塊並且這些塊被存儲在一組 DataNode 上。

1)NameNode

文件的元數據採用集中式存儲方案存放在 NameNode 當中。NameNode 負責執行文件系統命名空間的操作,如打幵、關閉、重命名文件和目錄。NameNode 同時也負責將數據塊映射到對應的 DataNode 中。

2) DataNode

DataNode 是文件系統的工作結點。它們根據需要存儲並檢索數據塊,並且定期向 NameNode 發送他們所存儲的塊的列表。文件數據塊本身存儲在不同的 DataNode 當中,DataNode 可以分佈在不同機架上。
DataNode 負責服務文件系統客戶端發出的讀/寫請求。DataNode 同時也負責接收 NameNode 的指令來進行數據塊的創建、刪除和複製。

3)Client

HDFS 的 Client 會分別訪問 NameNode 和 DataNode 以獲取文件的元信息及內容。HDFS 集群的 Client 將直接訪問 NameNode 和 DataNode,相關數據會直接從 NameNode 或者 DataNode 傳送到客戶端。
NameNode 和 DataNode 都是被設計為在普通 PC 上運行的軟件程序。HDFS 是用 Java 語言實現的,任何支持 Java 語言的機器都可以運行 NameNode 或者 DataNode。Java 語言本身的可移植性意味著 HDFS 可以被廣泛地部署在不同的機器上。


一個典型的部署就是,集群中的一臺專用機器運行 NameNode,集群中的其他機器每臺運行一個 DataNode 實例。該架構並不排除在同一臺機器上運行多個 DataNode 實例的可能,但在實際的部署中很少會這麼做。
單一 NameNode 的設計極大地簡化了集群的系統架構,它使得所有 HDFS 元數據的仲裁和存儲都由單一 NameNode 來決定,避免了數據不一致性的問題。

HDFS 數據複製

HDFS 可以跨機架、跨機器,可靠地存儲海量文件。HDFS 把每個文件存儲為一系列的數據塊,除了最後一個數據塊以外,一個文件的所有數據塊都是相同大小的。
為了容錯,一個文件的數據塊會被複制。對於每個文件來說,文件塊大小和複製因子都是可配置的。應用程序可以聲明一個文件的副本數。複製因子可以在文件創建時聲明,並且可以在以後修改。
NameNode 控制所有的數據塊的複製決策,如圖 2 所示。它週期性地從集群中的 DataNode 中收集心跳和數據塊報告。收集到心跳則意味著 DataNode 正在提供服務。收集到的數據塊報告會包含相應 DataNode 上的所有數據塊列表。

HDFS架構和實現機制簡介

圖 2 HDFS複製策略

通用場景下,當複製因子是 3 時,HDFS 的放置策略是將一個副本放置到本地機架的一個結點上,另一個放在本地機架的不同結點上,最後一個放在不同機架的不同結點上。這一策略與把 3 個副本放在 3 個不同機架上的策略相比,減少了機架之間的寫操作,從而提升了寫性能。
機架不可用的概率要比結點不可用的概率低很多,這一策略並不影響數據可靠性和可用性。但是這一策略確實減少了讀取數據時的聚合網絡帶寬,畢竟一個數據塊是放置在兩個不同的機架上,而不是 3 個。這一策略沒有均勻地分佈副本,三分之二的副本在一個機架上,另三分之一的副本分佈在其他機架上。
當一切運行正常時,DataNode 會週期性發送心跳信息給 NameNode(默認是每 3 秒鐘一次)。如果 NameNode 在預定的時間內沒有收到心跳信息(默認是 10 分鐘),就會認為 DataNode 出現了問題,這時候就會把該 DataNode 從集群中移除,並且啟動一個進程去恢復數據。DataNode 脫離集群的原因有多種,如硬件故障、主板故障、電源老化和網絡故障等。
對於 HDFS 來說,丟失一個 DataNode 意味著丟失了存儲在它的硬盤上的數據塊的副本。假如在任意時間總有超過一個副本存在,故障將不會導致數據丟失。當一個硬盤故障時,HDFS 會檢測到存儲在該硬盤上的數據塊的副本數量低於要求,然後主動創建需要的副本,以達到滿副本數狀態。


分享到:


相關文章: