HDFS是一個主從結構的體系,HDFS集群有一個NameNode和很多個DataNode組成。NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端聯系NameNode以獲取文件的元數據,而真正的文件I/O操作是直接和DataNode進行交互的。
NameNode就是主控制服務器,負責維護文件系統的命名空間(Namespace)并協調客戶端對文件的訪問,記錄命名空間內的任何改動或命名空間本身的屬性改動。DataNode負責它們所在的物理節點上的存儲管理,HDFS開放文件系統的命名空間以便讓用戶以文 件的形式存儲數據。HDFS的數據都是“一次寫入、多次讀取”,典型的塊大小是64MB, HDFS的文件通常是按照64MB被切分成不同的數據塊(Block),每個數據塊盡可能地分 散存儲于不同的DataNode中。NameNode執行文件系統的命名空間操作,比如打開、關閉、重命名文件或目錄,還決定數據塊到DataNode的映射。DataNode負責處理客戶的讀寫請求,依照NameNode的命令,執行數據塊的創建、復制、刪除等工作。圖6-1是HDFS的結構示意圖。例如客戶端要訪問一個文件,首先,客戶端從NameNode獲得組成文件的數據塊的位置列表,也就是知道數據塊被存儲在哪些DataNode上;然后客戶端直接從DataNode上讀取文件數據。NameNode不參與文件的傳輸。

HDFS典型的部署是在一個專門的機器上運行NameNode,集群中的其他機器各運行—個DataNode;也可以在運行NameNode的機器上同時運行DataNode,或者一臺機器上運行多個DataNode。這種一個集群只有一個NameNode的設計大大簡化了系統架構。
NameNode使用事務日志(EditLog)記錄HDFS元數據的變化,使用映像文件 (Fslmage)存儲文件系統的命名空間,包含文件的映射、文件的屬性信息等。事務日志和映像文件都存儲在NameNode的本地文件系統。
NameNode啟動時,從磁盤中讀取映像文件和事務日志,把事務日志的事務都應用到內存中的映像文件上,然后將新的元數據刷新到本地磁盤的新的映像文件中,這樣可以截去舊的事務日志,這個過程稱為檢査點(Checkpoint)。HDFS還有Secondary NameNode節點,它輔助NameNode處理映像文件和事務日志。NameNode啟動的時候合并映像文件和事務日志,而Secondary NameNode會有周期地從NameNode上復制映像文件和事務日志到臨時目錄,合并生成新的映像文件后再重新上傳到NameNode, NameNofe更新映像文件并清理事務日志,使得事務日志的大小始終控制在可配置的限度下。