HDFS采用了主從(MasterSlave)結構模型、一個HDFS集群包括一個名稱節點和若干個數節點(如下圖)。名稱節點作為中心服務器、負責管理文件系統的命名空間及客戶端對文件請問,集群中的數據節點一般是一個節點運行一個數據節點進程,負責處理文件系統客戶端的寫請求,在名稱節點的統一調度下進行數據塊的創建、刪除和復制等操作。每個數據節點的數實際上是保存在本地Linux文件系統中的,每個數據節點會周期性地向名稱節點發送“心跳”息、報告自己的狀態,沒有按時發送心跳信息的數據節點會被標記為“巖機”,不會再給它分配何10請求。

CGFT

HDFS命名空間管理

HDFS的命名空間包含目錄、文件和塊。命名空間管理是指命名空間支持對HDFS中的目錄、件和塊做類似文件系統的創建、修改、刪除等基本操作。在當前的HDPS體系結構中,在整個HDFS集群中只有一個命名空間,并且只有*個名稱節點,該節點負責對這個命名空間進行管理。

HDFS使用的是傳統的分級文件體系,因此,用戶可以像使用普通文件系統一樣,創建、除目錄和文件,在目錄間轉移文件,重命名文件等。但是,HDFS還沒有實現磁盤配額和文件訪間權限等功能,也不支持文件的硬連接和軟連接(快捷方式)。

通信協議

HDFS是一個部署在集群上的分布式文件系統,因此,很多數據需要通過網絡進行傳輸。

有的HDFS通信協議都是構建在TCP/P協議基礎之上的。客戶端通過一個可配置的端口向名稱節點主動發起TCP連接,并使用客戶端協議與名稱節點進行交互。名稱節點和數據節點之間則使用數據節點協議進行交互。客戶端與數據節點的交互是通過RPC(Remote Procedure Call)來實現的。在設計上,名稱節點不會主動發起RPC,而是響應來自客戶端和數據節點的RPC請求。

cgft

客戶端

客戶端是用戶操作HDFS*常用的方式,HDFS在部署時都提供了客戶端。不過需要說明的是,嚴格來說,客戶端并不算是HDFS的一部分。客戶端可以支持打開、讀取、寫人等常見的操作,并且提供了類似Shell的命令行方式來訪問HDFS中的數據。此外,HDFS也提供了JavaAPI,作為應用程序訪問文件系統的客戶端編程接口。

HDFS體系結構的局限性

HDFS只設置*一個名稱節點,這樣做雖然大大簡化了系統設計,但也帶來了一些明顯的局限性,具體如下:

(1)命名空間的限制。名稱節點是保存在內存中的,因此,名稱節點能夠容納對象(文件、塊)的個數會受到內存空間大小的限制。

(2)性能的瓶頸。整個分布式文件系統的吞吐量,受限于單個名稱節點的吞吐量。

(3)隔離問題。由于集群中只有一個名稱節點,只有一個命名空間,因此,無法對不同應用程序進行隔離。

(4)集群的可用性。一旦這個*的名稱節點發生故障,會導致整個集群變得不可用。