HDFS名稱節點工作過程


一、名稱節點(NameNode)

1.什么是名稱節點

在HDFS中,名稱節點負責管理分布式文件系統的命名空間(Namespace),保存了兩個核心的數據結構-FsImage和EditLog。

  • FsImage:用於維護文件系統樹以及文件樹中所有的文件和文件夾的元數據。
  • EditLog:中記錄所有針對文件創建、刪除、重命名等操作的日志文件。

名稱節點記錄了每個文件中各個塊所在的數據節點的位置信息,但並不持久化存儲這些信息,而是在系統每次啟動時掃描所有數據節點重構得到這些信息。

2.名稱節點工作過程

名稱節點啟動時,會將FsImage的內容加載到內存當中,然后執行EditLog文件中的各項操作,使得內存中的元數據保存最新。這個操作完成后,就會創建一個新的FsImage文件和一個空的EditLog文件。名稱節點啟動成功並進入正常運行狀態以后,HDFS中的更新操作都會被寫入到EditLog,而不是直接寫入FsImage(文件大,直接寫入系統會變慢)。

名稱節點在啟動的過程中處於“安全模式”,只能對外提供讀操作。啟動結束后,則進入正常運行狀態,對外提供讀寫操作。

二、第二名稱節點(Secondary NameNode)
1.功能

在名稱節點運行期間,EditLog文件由於操作不斷發生會逐漸變大,為解決逐漸變大帶來的問題,故采用了第二名稱節點。

  • 可以完成EditLog與FsImage的合並操作,減少EditLog文件大小,縮短名稱節點重啟時間
  • 作為名稱節點的“檢查點”,保存名稱節點中的元數據信息。

2.工作過程

  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就變小了。

HDFS設計中,並不支持把系統直接切換到第二名稱節點,從這角度,第二名稱節點只是起到名稱節點“檢查點”的作用,並不能起到“熱備份”作用。即使有了第二名稱節點的存在,當名稱節點發生故障時,系統還是有可能會丟失部分元數據信息。

Reference:
dblab.xmu.edu.cn


學習交流,有任何問題還請隨時評論指出交流。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM