1. 程式人生 > >HDFS體系架構

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能夠重建元資料,並確保每個資料塊有足夠的副本。