1. 程式人生 > >SecondaryNameNode作用

SecondaryNameNode作用

ron 一段時間 int 來看 不同 一個 更新 property proc

[TOC]


文檔來自李德勝老師,下面有些地方加了一些自己的理解和備註。

? 在Hadoop中,有一些命名不好的模塊,Secondary NameNode是其中之一。

? 從它的名字上看,它給人的感覺就像是NameNode的備份。但它實際上卻不是。很多Hadoop的初學者都很疑惑,Secondary NameNode究竟是做什麽的,而且它為什麽會出現在HDFS中。本文將解釋下SecondaryNameNode在HDFS中所扮演的角色。
從它的名字來看,你可能認為它跟NameNode有點關系。沒錯,你猜對了。因此在我們深入了解SecondaryNameNode之前,我們先來看看NameNode是做什麽的。

NameNode

? NameNode主要是用來保存HDFS的元數據信息,比如命名空間信息,塊信息等。當它運行的時候,這些信息是存在內存中的。但是這些信息也可以持久化到磁盤上。

技術分享圖片

? 上面的這張圖片展示了NameNode怎麽把元數據保存到磁盤上的。這裏有兩個不同的文件:

  • fsimage - 它是在NameNode啟動時對整個文件系統的快照
  • edit logs - 它是在NameNode啟動後,對文件系統的改動序列

? 只有在NameNode重啟時,edit logs才會合並到fsimage文件中,從而得到一個文件系統的最新快照。但是在產品集群中NameNode是很少重啟的,這也意味著當NameNode運行了很長時間後,edit logs文件會變得很大。在這種情況下就會出現下面一些問題:

    1. edit logs文件會變的很大,怎麽去管理這個文件是一個挑戰。
    1. NameNode的重啟會花費很長時間,因為有很多改動[在edit logs中]要合並到fsimage文件上。
    1. 如果NameNode掛掉了,那我們就丟失了很多改動因為此時的fsimage文件非常舊。[在這個情況下丟失的改動不會很多, 因為丟失的改動應該是還在內存中但是沒有寫到edit logs的這部分。]

? 因此為了克服這個問題,我們需要一個易於管理的機制來幫助我們減小edit logs文件的大小和得到一個最新的fsimage文件,這樣也會減小在NameNode上的壓力。

? 現在我們明白了NameNode的功能和所面臨的挑戰 - 保持文件系統最新的元數據。那麽,這些跟SecondaryNameNode又有什麽關系呢?

[

葉子備註:

那麽從上面的分析以及後面的文檔可以知道,或者說,很容易產生一個疑問,既然fsimage要在nameNode重啟以後才能更新,即便後面有了secondaryNameNode之後也要一定的時間後才會去同步這些文件,那麽為什麽每次上傳一個文件後,就可以馬上通過命令行方式獲取到這個文件呢,我的元數據信息可是保存在fsimage中的呀!不要忘記了,fsimage和edit的存在只是為了持久化這些數據信息,這意味著,nameNode啟動之後,內存當中肯定也是保存著這些信息的,而添加刪除文件等操作所產生的信息,肯定也是有保存到nameNode的內存當中的(不然怎麽可能馬上就讀取到這些數據呢),同步fsimage,合並edit,只是為了持久化這些數據,防止nameNode出現異常時元數據信息的丟失。

]

Secondary NameNode

? SecondaryNameNode就是來幫助解決上述問題的,它的職責是合並NameNode的edit logs到fsimage文件中。

技術分享圖片

? 上面的圖片展示了SecondaryNameNode是怎麽工作的。

? 首先,它定時到NameNode去獲取edit logs,並更新到fsimage上。[Secondary NameNode自己的fsimage]

一旦它有了新的fsimage文件,它將其拷貝回NameNode中。

? NameNode在下次重啟時會使用這個新的fsimage文件,從而減少重啟的時間。

? Secondary NameNode的整個目的是在HDFS中提供一個檢查點。它只是NameNode的一個助手節點。

? 現在,我們明白了Secondary NameNode所做的不過是在文件系統中設置一個檢查點來幫助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的備份。所以一般也稱呼它為checkpoint node吧。

二者的工作機制

技術分享圖片

? 1.NameNode管理著元數據信息,元數據信息會定期的刷到磁盤中,其中的兩個文件是edits即操作日誌文件和fsimage即元數據鏡像文件,新的操作日誌不會立即與fsimage進行合並,也不會刷到NameNode的內存中,而是會先寫到edits中(因為合並需要消耗大量的資源)。當edits文件的大小達到一個臨界值(默認是64MB)或者間隔一段時間(默認是1小時)的時候checkpoint會觸發SecondaryNameNode進行工作。

? 2.當觸發一個checkpoint操作時,NameNode會生成一個新的edits即上圖中的edits.new文件,同時SecondaryNameNode會將edits文件和fsimage復制到本地。

? 3.SecondaryNameNode將本地的fsimage文件加載到內存中,然後再與edits文件進行合並生成一個新的fsimage文件即上圖中的Fsimage.ckpt文件。

? 4.SecondaryNameNode將新生成的Fsimage.ckpt文件復制到NameNode節點。

? 5.在NameNode結點的edits.new文件和Fsimage.ckpt文件會替換掉原來的edits文件和fsimage文件,至此,剛好是一個輪回即在NameNode中又是edits和fsimage文件了。

? 6.等待下一次checkpoint觸發SecondaryNameNode進行工作,一直這樣循環操作。

:checkpoint觸發的條件可以在hdfs-site.xml文件中進行配置,如下:

<property>  
  <name>dfs.namenode.checkpoint.period</name>  
  <value>3600</value>  
  <description>
The number of seconds between two periodic checkpoints.  
  </description>  
</property>  

SecondaryNameNode作用