1. 程式人生 > >002-NameNode 和 Secondary NameNode

002-NameNode 和 Secondary NameNode

NameNode 和 Secondary NameNode

NameNode:主要是用來儲存 HDFS 的元資料資訊,比如名稱空間資訊,塊資訊等。當它執行的時候,這些資訊是存在記憶體中的。但是這些資訊也可以持久化到磁碟上。
 
Secondary NameNode:也是 NameNode。也是用來儲存元資料資訊的。Secondary NameNode 的作用是定期合併 fsimage 和 edits log 檔案,並在一個限制內保持 edits log 大小。同時將最新的 fsimage 拷貝回 NameNode,以保證 NameNode 重啟後 HDFS 的狀態是最新狀態。
 
fsimage:儲存的是 namespace 和 發生變動的 最近的一次檢查點(最近一次發生變動的節點)。
edit log:改動日誌檔案,儲存系統變動的元資訊。


NameNode 啟動時會從 fsimage 讀取 HDFS 的狀態進行啟動,並將 edit log 合併到 fsimage,然後將 HDFS 的新狀態寫到 fsimage,並開始正常的操作一個空的 edit log 檔案。
 
由於 NameNode 啟動時才會合併 fsimage 和 edit log,所以 edits log 檔案在繁忙的叢集上可能會變得非常大。這將導致 NameNode 的下一次重新啟動需要更長的時間。所以,在這種情況下將面臨如下問題:
 1. edit logs檔案會變的很大,怎麼去管理這個檔案是一個挑戰。
 2. NameNode的重啟會花費很長時間,因為在edit logs中有很多改動,要合併到fsimage檔案上。
 3. 如果NameNode掛掉了,那我們就丟失了很多改動因為此時的fsimage檔案非常舊。
為了解決這個問題,於是就有了 Secondary NameNode:
 secondary NameNode會定期合併 fsimage 和 edits log 檔案,並在一個限制內保持 edits log 大小。
 secondary NameNode 通常在不同的機器上執行,而不是主 NameNode,因為它的記憶體需求與主 NameNode 是相同的。

NameNode

Secondary NameNode

參考地址:https://blog.csdn.net/WYpersist/article/details/79840776