1. 程式人生 > >HDFS(名稱節點與資料節點)簡介

HDFS(名稱節點與資料節點)簡介

HDFS:分散式檔案系統把檔案分佈儲存到多個計算機節點上,成千上萬的計算機節點構成計算機叢集

這些節點分為主從節點,主節點可叫作名稱節點(NameNode),從節點可叫作資料節點(DataNode)

HDFS的儲存模式:

HDFS通過塊的模式儲存資料,預設情況下一個塊是64M,把大檔案拆分成多個塊,可以最小化定址開銷
這樣的好處是:
1.支援大規模檔案儲存 : 檔案以塊為單位進行儲存,一個大規模檔案可以被分拆成若干個檔案塊,不同的檔案塊可以被分發到不同的節點上,因此,一個檔案的大小不會受到單個節點的儲存容量的限制,可以遠遠大於網路中任意節點的儲存容量
2.簡化系統設定 : 因為檔案塊大小是固定的,這樣就可以很容易計算出一個節點可以儲存多少檔案塊;其次,方便了元資料的管理,元資料不需要和檔案塊一起儲存,可以由其他系統負責管理元資料
3.適合資料備份 : 每個檔案塊都可以冗餘儲存到多個節點上,大大提高了系統的容錯性和可用性

名稱節點最主要功能

:名稱節點記錄了每個檔案中各個塊所在的資料節點的位置資訊

名稱節點(NameNode)與DataNode的功能:


在HDFS中,名稱節點(NameNode)負責管理分散式檔案系統的名稱空間(Namespace),儲存了兩個核心的資料結構,即FsImage和EditLog
FsImage用於維護檔案系統樹以及檔案樹中所有的檔案和資料夾的元資料
操作日誌檔案EditLog中記錄了所有針對檔案的建立、刪除、重新命名等操作

名稱節點的啟動:
1.在啟動時,系統會將FsImage中的內容載入到記憶體中去,之後再執行EditLog中的操作,使得記憶體中的資料和實際同步,存在記憶體中的支援客戶端的讀。
2.一旦在記憶體中成功建立檔案系統元資料的對映,則建立一個新的FsImage檔案和一個空的EditLog檔案
3.名稱節點起來之後,HDFS中的更新操作會重新寫到EditLog檔案中,因為FsImage檔案一般都很大(GB級別的很常見),
如果所有的更新操作都往FsImage檔案中新增,這樣會導致系統執行的十分緩慢,但是,如果往EditLog檔案裡面寫就不會這樣,
因為EditLog 要小很多。每次執行寫操作之後,且在向客戶端傳送成功程式碼之前,edits檔案都需要同步更新

但為了防止EditLog過大的問題:引入了第二名稱節點(SecondaryNameNode)
第二名稱節點:是HDFS架構中的一個組成部分,它是用來儲存名稱節點中對HDFS 元資料資訊的備份,並減少名稱節點重啟的時間。
SecondaryNameNode一般是單獨執行在一臺機器上

SecondaryNameNode讓EditLog變小的工作流程:
(1)SecondaryNameNode會定期和NameNode通訊,請求其停止使用EditLog檔案,暫時將新的寫操作寫到一個新的檔案edit.new上來,這個操作是瞬間完成,上層寫日誌的函式完全感覺不到差別;
(2)SecondaryNameNode通過HTTP GET方式從NameNode上獲取到FsImage和EditLog檔案,並下載到本地的相應目錄下;
(3)SecondaryNameNode將下載下來的FsImage載入到記憶體,然後一條一條地執行EditLog檔案中的各項更新操作,使得記憶體中的FsImage保持最新;這個過程就是EditLog和FsImage檔案合併;
(4)SecondaryNameNode執行完(3)操作之後,會通過post方式將新的FsImage檔案傳送到NameNode節點上

(5)NameNode將從SecondaryNameNode接收到的新的FsImage替換舊的FsImage檔案,同時將edit.new替換EditLog檔案,通過這個過程EditLog就變小了

工作流程圖:


DataNode:資料節點是分散式檔案系統HDFS的工作節點,負責資料的儲存和讀取,會根據客戶端或者是名稱節點的排程來進行資料的儲存和檢索,並且向名稱節點定期傳送自己所儲存的塊的列表

即HDFS需要實現的方面:
1.相容廉價的硬體裝置
2.流資料讀寫
3.大資料集
4.簡單的檔案模型
5.強大的跨平臺相容性
但這樣面臨的侷限性:
1.不適合低延遲資料訪問
2.無法高效儲存大量小檔案
3.不支援多使用者寫入及任意修改檔案