HDFS簡介
HDFS (全稱:Hadoop Distribute File System,Hadoop 分佈式文件系統)是 Hadoop 核心組成,是分佈式存儲服務。
分佈式文件系統橫跨多臺計算機,在大數據時代有着廣泛的應用前景,它們爲存儲和處理超大規模數據提供所需的擴展能力。
HDFS是分佈式文件系統中的一種
HDFS的重要概念
-
典型的Master/Slave架構:
HDFS 的架構是典型的 Master/Slave 結構。
HDFS集羣往往是一個NameNode(HA架構會有兩個NameNode,聯邦機 制)+多個DataNode組成;
NameNode是集羣的主節點,DataNode是集羣的從節點。 -
分塊存儲(block機制)
HDFS 中的文件在物理上是分塊存儲(block)的,塊的大小可以通過配置參數來規定;
Hadoop2.x版本中默認的block大小是128M; -
命名空間(NameSpace)
HDFS 支持傳統的層次型文件組織結構。用戶或者應用程序可以創建目錄,然後將文件保存在這些目錄裏。文件系統名字空間的層次結構和大多數現有的文件系統類似:用戶可以創建、刪除、移動或重命名文件。
Namenode 負責維護文件系統的名字空間,任何對文件系統名字空間或屬性的修改都將被Namenode 記錄下來。
HDFS提供給客戶單一個抽象目錄樹,訪問形式:hdfs://namenode的hostname:port/test/input;例如:hdfs://linux121:9000/test/input -
NameNode元數據管理
我們把目錄結構及文件分塊位置信息叫做元數據。
NameNode的元數據記錄每一個文件所對應的block信息(block的id,以及所在的DataNode節點的信息) -
DataNode數據存儲
文件的各個 block 的具體存儲管理由 DataNode 節點承擔。一個block會有多個DataNode來存儲,DataNode會定時向NameNode來彙報自己持有的block信息。 -
副本機制
爲了容錯,文件的所有 block 都會有副本。每個文件的 block 大小和副本系數都是可配置的。應用程序可以指定某個文件的副本數目。副本系數可以在文件創建的時候指定,也可以在之後改變。副本數量默認是3個。 -
一次寫入,多次讀出
HDFS 是設計成適應一次寫入,多次讀出的場景,且不支持文件的隨機修改。 (支持追加寫入,不只支持隨機更新)
正因爲如此,HDFS 適合用來做大數據分析的底層存儲服務,並不適合用來做網盤等應用(修改不方便,延遲大,網絡開銷大,成本太高)
HDFS架構
-
NameNode(nn):HDFS集羣管理者,Master
- 維護管理HDFS的名稱空間(NameSpace)
- 維護副本策略
- 記錄文件Block的映射信息
- 負責處理客戶端讀寫請求
-
DataNode:NameNode下達命令,DataNode執行實際操作,Slave節點。
- 保存實際的數據塊
- 負責數據塊的讀寫
-
Client:客戶端
- 上傳文件到HDFS的時候,Client負責將文件切分成Block,然後進行上傳
- 請求NameNode交互,獲取文件的位置信息
- 讀取或寫入文件,與DataNode交互
- Client可以使用一些命令來管理HDFS或者訪問HDFS