HDFS體系架構
HDFS是一種分散式檔案系統,可提供對應用程式資料的高吞吐量訪問。
HDFS是基於流資料模式訪問和處理超大檔案的需求而開發的,可以運行於廉價的商用伺服器上。它所具有的高容錯性、高可靠性、高可擴充套件性、高獲得性、高吞吐率等特徵為海量資料提供了不怕故障的儲存。
HDFS優點/為什麼選擇HDFS儲存資料?
1、高容錯性
1)資料自動儲存多個副本。它通過增加副本的形式,提高容錯性;
2)某一個副本丟失以後,可以自動恢復,這是由HDFS內部機制實現的
2、適合批處理
1)它是通過移動計算而不是移動資料
2)它把資料位置暴露給計算框架
3、適合大資料處理
1)處理資料達到GB、TB、甚至PB級別的資料
2)處理百萬規模以上的檔案數量
3)處理10K節點的規模
4、流式資料訪問
1)一次寫入,多次讀取,檔案一旦寫入不能修改,只能追加
2)保證資料的一致性
5、可構建在廉價機器上
1)通過多副本機制,提高可靠性
2)提供了容錯和恢復機制
HDFS缺點/HDFS並不適合所有的場所:
1、低延時資料訪問
比如毫秒級的來儲存資料、低延遲的高吞吐率
2、小檔案儲存
1)儲存大量小檔案的話,它會佔用NameNode大量的記憶體來儲存檔案、目錄和塊資訊,而NameNode的記憶體是有限的
2)小檔案儲存的尋道時間會超過讀取時間
3、併發寫入、檔案隨機修改
1)一個檔案只能有一個寫,不允許多個執行緒同時寫
2)僅支援資料append(追加),不支援檔案的隨機修改
HDFS如何儲存資料?
HDFS採用Master/Slave架構來儲存資料,這種架構主要由HDFS Client、NameNode、DataNode、SecondaryNameNode
Client客戶端:
1、檔案切分(物理切分)。檔案上傳HDFS的時候,Client將檔案切分成一個個的block,然後進行儲存
2、與NameNode互動,獲取檔案的位置資訊
3、與DataNode互動,讀取或者寫入資料
4、Client提供一些命令來管理HDFS,比如啟動/關閉HDFS
5、Client可以通過一些命令來訪問HDFS
NameNode:就是Master
1、管理HDFS名稱空間,
維護著檔案系統樹及整顆樹內所有的檔案和目錄,這些資訊以兩個檔案形式永久儲存在本地磁碟上:名稱空間映象檔案fsimage和編輯日誌fsedits
fsimage:元資料映象檔案(檔案系統的目錄樹,比如說有哪些目錄,每個目錄有哪些檔案,這些資訊都儲存在fsimage檔案中)
fsedits:元資料操作日誌(針對目錄樹的修改操作,比如刪除了某個檔案或者增加了某個檔案,它都會把這些操作儲存在edits中)
2、管理資料塊block對映資訊
3、配置副本策略
4、處理客戶端讀寫請求
1)HDFS預設的最基本的儲存單位是128M的資料塊
2)和普通檔案系統相同的是,HDFS中的檔案是被分成每塊為128M的資料塊進行儲存的
3)不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間
副本策略:
HDFS中的資料塊block會有多個副本,預設為3個(可配置),副本存放策略如下:
第一塊:在本地機器的HDFS目錄下儲存一個block
第二塊:與第一個不同且隨機另外選擇的機架上的節點上
第三塊:與第二個副本放在同一個機架上,且隨機選擇另一個節點
DataNode:就是Slave,NameNode下達命令,DataNode執行實際的操作
1)儲存實際的資料塊
2)執行資料塊的讀寫操作
SecondaryNameNode:
並非NameNode的熱備(熱備從廣義上講,就是伺服器高可用應用的另一種說法,從狹義上講,雙機熱備特指基於高可用系統中的兩臺伺服器的熱備)。當NameNode掛掉的時候,它並不能馬上替換NameNode並提供服務
1、輔助NameNode,分擔其工作量
2、定期合併fsimage和fsedits,並推送給NameNode
3、在緊急情況下,可輔助恢復NameNode
基本概念:
機架:HDFS叢集,由分佈在多個機架上的大量DataNode組成,不同機架之間節點通過交換機通訊,HDFS通過機架感知策略,使NameNode能夠確定每個DataNode所屬的機架ID,使用副本存放策略,來改進資料的可靠性、可用性和網路頻寬的利用率。
資料塊(block):HDFS最基本的儲存單元,預設為128M,使用者可以自行設定大小。
元資料:指HDFS檔案系統中,檔案和目錄的屬性資訊。HDFS實現時,採用了 映象檔案(Fsimage) + 日誌檔案(EditLog)的備份機制。檔案的映象檔案中內容包括:修改時間、訪問時間、資料塊大小、組成檔案的資料塊的儲存位置資訊。目錄的映象檔案內容包括:修改時間、訪問控制權限等資訊。日誌檔案記錄的是:HDFS的更新操作。
NameNode啟動的時候,會將映象檔案和日誌檔案的內容在記憶體中合併。把記憶體中的元資料更新到最新狀態。
在HDFS中,NameNode 和 DataNode之間使用TCP協議進行通訊。DataNode每3s向NameNode傳送一個心跳。每10次心跳後,向NameNode傳送一個數據塊報告自己的資訊,通過這些資訊,NameNode能夠重建元資料,並確保每個資料塊有足夠的副本。