1. 程式人生 > >hadoop[4]-hdfs分散式檔案系統的基本工作機制

hadoop[4]-hdfs分散式檔案系統的基本工作機制

一、Namenode 和 Datanode

HDFS採用master/slave架構。一個HDFS叢集是由一個Namenode和一定數目的Datanodes組成。Namenode是一箇中心伺服器,負責管理檔案系統的名字空間(namespace)以及客戶端對檔案的訪問。叢集中的Datanode一般是一個節點一個,負責管理它所在節點上的儲存。HDFS暴露了檔案系統的名字空間,使用者能夠以檔案的形式在上面儲存資料。從內部看,一個檔案其實被分成一個或多個數據塊,這些塊儲存在一組Datanode上。Namenode執行檔案系統的名字空間操作,比如開啟、關閉、重新命名檔案或目錄。它也負責確定資料塊到具體Datanode節點的對映。Datanode負責處理檔案系統客戶端的讀寫請求。在Namenode的統一排程下進行資料塊的建立、刪除和複製。

簡單來說就是datanode把檔案切成多個小塊,儲存在不同的機器上,namenode負責維護整個檔案系統的目錄樹。

Namenode和Datanode被設計成可以在普通的商用機器上執行。這些機器一般執行著GNU/Linux作業系統(OS)。HDFS採用Java語言開發,因此任何支援Java的機器都可以部署Namenode或Datanode。由於採用了可移植性極強的Java語言,使得HDFS可以部署到多種型別的機器上。一個典型的部署場景是一臺機器上只執行一個Namenode例項,而叢集中的其它機器分別執行一個Datanode例項。這種架構並不排斥在一臺機器上執行多個Datanode,只不過這樣的情況比較少見。

二、副本存放:

把一個檔案分成多個小塊,儲存到不同的機器上,如果某臺機器出現故障,那麼就沒辦法獲取到完整的檔案了,這時候就出現了副本存放,即每個datanode上都存放N份小塊的副本:

在大多數情況下,副本系數是3,HDFS的存放策略是將一個副本存放在本地機架的節點上,一個副本放在同一機架的另一個節點上,最後一個副本放在不同機架的節點上。這種策略減少了機架間的資料傳輸,這就提高了寫操作的效率。機架的錯誤遠遠比節點的錯誤少,所以這個策略不會影響到資料的可靠性和可用性。於此同時,因為資料塊只放在兩個(不是三個)不同的機架上,所以此策略減少了讀取資料時需要的網路傳輸總頻寬。在這種策略下,副本並不是均勻分佈在不同的機架上。三分之一的副本在一個節點上,三分之二的副本在一個機架上,其他副本均勻分佈在剩下的機架中,這一策略在不損害資料可靠性和讀取效能的情況下改進了寫的效能。

三、特性:

hdfs適應一次寫入,多次讀出的場景,並不支援檔案的修改,不適合做網盤應用,因為不便修改,延遲大、網路開銷大。適合資料分析。

  • 容量可以線上擴充套件
  • 資料儲存高可靠
  • 分散式運算處理很方便
  • 資料訪問延遲較大,不支援資料的修改操作
  • 適合一次寫入,多次讀出的場景

更多詳情可以參考官方文件(Hadoop分散式檔案系統:架構和設計):http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html