HDFS(Hadoop Distributed File System,Hadoop 分佈式文件系統)是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS 能提供高吞吐量的數據訪問,適合那些有著超大數據集(largedata set)的應用程序。
HDFS 的設計特點:
大數據文件:非常適合上T 級別的大文件或者一堆大數據文件的存儲。
文件分塊存儲:HDFS 將一個完整的大文件平均分塊存儲到不同計算機上,這樣讀取文件可以同時從多個主機取不同區塊的文件,多主機讀取比單主機讀取效率要高得多得多。
流式數據訪問:一次寫入多次讀寫,這種模式跟傳統文件不同,它不支持動態改變文件內容,而是要求讓文件一次寫入就不做變化,要變化也只能在文件末添加內容。
廉價硬件:HDFS 可以應用在普通PC 機上,這種機制能夠讓給一些公司用幾十臺廉價的計算機就可以撐起一個大數據集群。
硬件故障:HDFS 認為所有計算機都可能會出問題,為了防止某個主機失效讀取不到該主機的塊文件,它將同一個文件塊副本分配到其它某幾個主機上,如果其中一臺主機失效,可以迅速找另一塊副本取文件。
HDFS 的關鍵元素:
Block(塊):將一個文件進行分塊,通常是64M。
NameNode(名稱節點):保存整個文件系統的目錄信息、文件信息及分塊信息,這是由唯一臺主機專門保存,當然這臺主機如果出錯,NameNode 就失效了。在Hadoop 2.0 開始支持activity-standy(動態備份)模式,如果主NameNode 失效,啟動備用主機運行NameNode。
DataNode(數據節點):分佈在廉價的計算機上,用於存儲Block 塊文件。
HDFS 基本特點:
對於整個集群有單一的命名空間。
數據一致性。適合一次寫入多次讀取的模型,客戶端在文件沒有被成功創建之前無法看到文件存在。
文件會被分割成多個文件塊,每個文件塊被分配存儲到數據節點上,而且根據配置會由複製文件塊來保證數據的安全性。
HDFS 三個重要角色
NameNode:分佈式文件系統中的管理者,主要負責管理文件系統的命名空間、集群配置信息和存儲塊的複製等。NameNode 會將文件系統的Meta-data(元數據)存儲在內存中,這些信息主要包括了文件信息、每一個文件對應的文件塊的信息和每一個文件塊在DataNode 的信息等。
DataNode:文件存儲的基本單元,它將Block 存儲在本地文件系統中,保存了Block 的Meta-data,同時週期性地將所有存在的Block 信息發送給NameNode。
Clien:需要獲取分佈式文件系統文件的應用程序。
HDFS 三個基本操作及交互關係
文件寫入:
Client 向NameNode 發起文件寫入的請求。
NameNode 根據文件大小和文件塊配置情況,返回給Client 它所管理部分DataNode 的信息。
Client 將文件劃分為多個Block,根據DataNode 的地址信息,按順序寫入到每一個DataNode 塊中。
文件讀取:
Client 向NameNode 發起文件讀取的請求。
NameNode 返回文件存儲的DataNode 的信息。
Client 讀取文件信息。
文件Block 複製:
NameNode 發現部分文件的Block 不符合最小複製數或者部分DataNode 失效。
通知DataNode 相互複製Block。
DataNode 開始直接相互複製。