secondNameNode作用


 

  在Hadoop中,有一些命名不好的模塊,Secondary NameNode是其中之一。從它的名字上看,它給人的感覺就像是NameNode的備份。但它實際上卻不是。很多Hadoop的初學者都很疑惑,Secondary NameNode究竟是做什么的,而且它為什么會出現在HDFS中。

  從它的名字來看,你可能認為它跟NameNode有點關系。沒錯,你猜對了。因此在我們深入了解Secondary NameNode之前,我們先來看看NameNode是做什么的。

NameNode

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

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

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

 

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

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

因此為了克服這個問題,我們需要一個易於管理的機制來幫助我們減小edit logs文件的大小和得到一個最新的fsimage文件,這樣也會減小在NameNode上的壓力。這跟Windows的恢復點是非常像的,Windows的恢復點機制允許我們對OS進行快照,這樣當系統發生問題時,我們能夠回滾到最新的一次恢復點上。

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

Secondary NameNode

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

 

上面的圖片展示了Secondary NameNode是怎么工作的。

  1. 首先,它定時到NameNode去獲取edit logs,並更新到fsimage上。[筆者注:Secondary NameNode自己的fsimage]
  2. 一旦它有了新的fsimage文件,它將其拷貝回NameNode中。
  3. NameNode在下次重啟時會使用這個新的fsimage文件,從而減少重啟的時間。

Secondary NameNode的整個目的是在HDFS中提供一個檢查點。它只是NameNode的一個助手節點。這也是它在社區內被認為是檢查點節點的原因。

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

 

后記

  關於NameNode是什么時候將改動寫到edit logs中的?

  這個操作實際上是由DataNode的寫操作觸發的,當我們往DataNode寫文件時,DataNode會跟NameNode通信,告訴NameNode什么文件的第幾個block放在它那里,NameNode這個時候會將這些元數據信息寫到edit logs文件中。

 

 

轉自:https://blog.csdn.net/xh16319/article/details/31375197


免責聲明!

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



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