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

CGFT

HDFS命名空間管理

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

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

通信協(xié)議

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

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

cgft

客戶端

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

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

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

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

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

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

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