Hadoop培訓課程:HDFS的Master/Slave架構,相比於基於P2P模型的分布式文件系統架構,HDFS采用的是基於Master/Slave主從架構的分布式文件系統,一個HDFS集群包含一個單獨的Master節點和多個Slave節點服務器,這里的一個單獨的Master節點的含義是HDFS系統中只存在一個邏輯上的Master組件。一個邏輯的Master節點可以包括兩台物理主機,即兩台Master服務器、多台Slave服務器。一台Master服務器組成單NameNode集群,兩台Master服務器組成雙NameNode集群,並且同時被多個客戶端訪問,所有的這些機器通常都是普通的Linux機器,運行着用戶級別(user-level)的服務進程。HDFS架構設計如圖3-1所示。

圖3-1中展示了HDFS的NameNode、DataNode以及客戶端之間的存取訪問關系,單一節點的NameNode大大簡化了系統的架構。NameNode負責保存和管理所有的HDFS元數據,因而用戶數據就不需要通過NameNode,也就是說文件數據的讀寫是直接在DataNode上進行的。HDFS存儲的文件都被分割成固定大小的Block,在創建Block的時候,NameNode服務器會給每個Block分配一個唯一不變的Block標識。DataNode服務器把Block以Linux文件的形式保存在本地硬盤上,並且根據指定的Block標識和字節范圍來讀寫塊數據。出於可靠性的考慮,每個塊都會復制到多個DataNode服務器上。在默認情況下,HDFS使用三個冗余備份,當然用戶可以為不同的文件命名空間設定不同的復制因子數。NameNode管理所有的文件系統元數據。這些元數據包括名稱空間、訪問控制信息、文件和Block的映射信息,以及當前Block的位置信息。NameNode還管理着系統范圍內的活動,比如,Block租用管理、孤立Block的回收,以及Block在DataNode服務器之間的遷移。NameNode使信息周期性地和每個DataNode服務器通信,發送指令到各個DataNode服務器並接收DataNode中Block的狀態信息。
HDFS客戶端代碼以庫的形式被鏈接到客戶程序中。在客戶端代碼中需要實現HDFS文件系統的API接口函數,應用程序與NameNode和DataNode服務器通信,以及對數據進行讀寫操作。客戶端和NameNode的通信只獲取元數據,所有的數據操作都是由客戶端直接和DataNode服務器進行交互的。HDFS不提供POSIX標准的API功能,因此,HDFS API調用不需要深入到Linux vnode級別。無論是客戶端還是DataNode服務器都不需要緩存文件數據。客戶端緩存數據幾乎沒有什么用處,因為大部分程序要么以流的方式讀取一個巨大的文件,要么工作集太大根本無法被緩存。因此,無須考慮與緩存相關的問題,同時也簡化了客戶端及整個系統的設計和實現。來源:CUUG官網