HDFS
是Hadoop Distribute File System
的簡稱,意為:Hadoop 分布式文件系統,是一種旨在在商品硬件上運行的分布式文件系統。它與現有的分布式文件系統有許多相似之處。但是,與其他分布式文件系統的區別很明顯。HDFS具有高度的容錯能力,旨在部署在低成本硬件上。HDFS提供對應用程序數據的高吞吐量訪問,并且適用于具有大數據集的應用程序。HDFS放寬了一些POSIX要求,以實現對文件系統數據的流式訪問。HDFS最初是作為Apache Nutch Web
搜索引擎項目的基礎結構而構建的。HDFS是Apache Hadoop Core
項目的一部分,是 Hadoop 核心組件之一,作為最底層的分布式存儲服務而存在。
一、特點
- 高容錯:硬件故障是正常現象,而非例外。HDFS實例可能包含數百或數千個服務器計算機,每個服務器計算機都存儲文件系統數據的一部分。存在大量組件并且每個組件的故障概率都很低的事實意味著HDFS的某些組件始終無法運行。因此,檢測故障并快速,自動地從故障中恢復是HDFS的核心目標。
- 流數據訪問:在HDFS上運行的應用程序需要對其數據集進行流式訪問。它們不是通常在通用文件系統上運行的通用應用程序。HDFS設計用于批處理,而不是用戶交互使用。重點在于數據訪問的高吞吐量,而不是數據訪問的低延遲。POSIX提出了許多針對HDFS的應用程序不需要的硬性要求。在一些關鍵領域中,POSIX語義已經被交易以提高數據吞吐率。
- 支持大數據集:在HDFS上運行的應用程序具有大量數據集。HDFS中的典型文件大小為GB到TB。因此,HDFS已調整為支持大文件。它應提供較高的聚合數據帶寬,并可以擴展到單個群集中的數百個節點。它應該在單個實例中支持數千萬個文件。
- 一次寫入多次讀取:HDFS應用程序需要文件一次寫入多次讀取訪問模型。一旦創建,寫入和關閉文件,除了追加和截斷外,無需更改。支持將內容追加到文件末尾,但不能在任意點更新。該假設簡化了數據一致性問題并實現了高吞吐量數據訪問。MapReduce應用程序或Web爬網程序應用程序非常適合此模型。
- 移動計算:如果應用程序所請求的計算在其所操作的數據附近執行,則效率會高得多。當數據集的大小巨大時,尤其如此。這樣可以最大程度地減少網絡擁塞,并提高系統的整體吞吐量。假設通常是將計算遷移到更靠近數據的位置,而不是將數據移動到應用程序正在運行的位置。HDFS為應用程序提供了接口,使它們自己更靠近數據所在的位置。
- 高度可移植性:HDFS是使用Java語言構建的;任何支持Java的機器都可以運行NameNode或DataNode軟件。高度可移植的Java語言的使用意味著HDFS可以部署在各種各樣的機器上。
- 運行于商業硬件上: Hadoop不需要特別貴的、reliable的(可靠的)機器,可運行于普通商用機器(可以從多家供應商采購) ,商用機器不代表低端機器。在集群中(尤其是大的集群),節點失敗率是比較高的HDFS的目標是確保集群在節點失敗的時候不會讓用戶感覺到明顯的中斷。
二、組成架構
HDFS采用主/從體系結構,整個HDFS集群由一個Namenode和多個Datanode構成master-worker(主從)模式。Namenode負責構建命名空間,管理文件的元數據等,Datanode負責實際存儲數據和處理來自系統客戶端的讀寫請求。
群集中單個NameNode的存在極大地簡化了系統的體系結構。NameNode是所有HDFS元數據的仲裁器和存儲庫。該系統的設計方式使用戶數據永遠不會流過NameNode。
具體來說,HDFS由四部分組成,HDFS Client、NameNode、DataNode和Secondary NameNode。
**HDFS客戶端:**就是客戶端。
1、提供一些命令來管理、訪問 HDFS,比如啟動或者關閉HDFS。
2、與 DataNode 交互,讀取或者寫入數據;讀取時,要與 NameNode 交互,獲取文件的位置信息;寫入 HDFS 的時候,Client 將文件切分成 一個一個的Block,然后進行存儲。
**NameNode:**即Master,
1、管理 HDFS 的名稱空間。
2、管理數據塊(Block)映射信息
3、配置副本策略
4、處理客戶端讀寫請求。
**DataNode:**就是Slave。NameNode 下達命令,DataNode 執行實際的操作。
1、存儲實際的數據塊。
2、執行數據塊的讀/寫操作。
**Secondary NameNode:**并非 NameNode 的熱備。當NameNode 掛掉的時候,它并不能馬上替換 NameNode 并提供服務。
1、輔助 NameNode,分擔其工作量。
2、定期合并 fsimage和fsedits,并推送給NameNode。
3、在緊急情況下,可輔助恢復 NameNode。
三、文件系統命名空間
HDFS支持傳統的分層文件組織。用戶或應用程序可以創建目錄并將文件存儲在這些目錄中。文件系統名稱空間層次結構與大多數其他現有文件系統相似。可以創建和刪除文件,將文件從一個目錄移動到另一個目錄或重命名文件。HDFS支持用戶配額和訪問權限。HDFS不支持硬鏈接或軟鏈接。但是,HDFS體系結構并不排除實現這些功能。
盡管HDFS遵循FileSystem的命名約定,但某些路徑和名稱(例如
/.reserved
和.snapshot
)被保留。功能,如透明加密和快照使用預約路徑。NameNode維護文件系統名稱空間。對文件系統名稱空間或其屬性的任何更改均由NameNode記錄。應用程序可以指定應由HDFS維護的文件副本的數量。文件的副本數稱為該文件的復制因子。此信息由NameNode存儲。
四、數據復制
HDFS旨在在大型群集中的計算機之間可靠地存儲非常大的文件。它將每個文件存儲為一系列塊。復制文件的塊是為了容錯。塊大小和復制因子是每個文件可配置的。
文件中除最后一個塊外的所有塊都具有相同的大小,而在添加了對可變長度塊的支持后,用戶可以在不填充最后一個塊的情況下開始新的塊,而不用配置的塊大小。
應用程序可以指定文件的副本數。復制因子可以在文件創建時指定,以后可以更改。HDFS中的文件只能寫入一次(追加和截斷除外),并且在任何時候都只能具有一個寫入器。
NameNode做出有關塊復制的所有決定。它定期從群集中的每個DataNode接收心跳信號和Blockreport。收到心跳信號表示DataNode正常運行。Blockreport包含DataNode上所有塊的列表。