1. 程式人生 > >hadoop[4]-hdfs分布式文件系統的基本工作機制

hadoop[4]-hdfs分布式文件系統的基本工作機制

names 技術 讀寫 在線 inux slave 策略 情況下 重命名文件

一、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

hadoop[4]-hdfs分布式文件系統的基本工作機制