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

CGFT

HDFS命名空間管理

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

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

通信協(xié)議

HDFS是一個部署在集群上的分布式文件系統(tǒng),因此,很多數(shù)據(jù)需要通過網(wǎng)絡(luò)進行傳輸。

有的HDFS通信協(xié)議都是構(gòu)建在TCP/P協(xié)議基礎(chǔ)之上的??蛻舳送ㄟ^一個可配置的端口向名稱節(jié)點主動發(fā)起TCP連接,并使用客戶端協(xié)議與名稱節(jié)點進行交互。名稱節(jié)點和數(shù)據(jù)節(jié)點之間則使用數(shù)據(jù)節(jié)點協(xié)議進行交互??蛻舳伺c數(shù)據(jù)節(jié)點的交互是通過RPC(Remote Procedure Call)來實現(xiàn)的。在設(shè)計上,名稱節(jié)點不會主動發(fā)起RPC,而是響應(yīng)來自客戶端和數(shù)據(jù)節(jié)點的RPC請求。

cgft

客戶端

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

HDFS體系結(jié)構(gòu)的局限性

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

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

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

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

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