本講主要剖析SecondaryNameNode。
“雲端運算分布式大資料Hadoop實戰高手之路”之完整發布目錄
雲端運算分布式大資料實戰技術Hadoop交流群:312494188,每天都會在群中發布雲端運算實戰性資料,歡迎大家加入!
Hadoop在啟動的時候,會啟動SecondaryNameNode,我們使用JPS命令查看一下查看一下Hadoop啟動時啟動了那些進程:
在我們講解SecondaryNameNode的具體作用之前,我們先看一看NameNode的工作特點和具體作用:
1,在Hadoop的叢集中,有NameNode和DataNode之分,在運行時DataNode可以有很多個,但NameNode只有一個;
2,NameNode儲存的是Hadoop叢集的metadata,即檔案系統的中繼資料,包含整個檔案系統的目錄結構,每一個目錄有哪些檔案,每個檔案有哪些分塊,每個分塊儲存在哪一個DataNode上面;
3,NameNode在記憶體中儲存metadata,這樣可以快速的處理用戶端對資料的“讀請求”;
4,但是記憶體中的資料是容易丟失的,例如掉電時,所以我們必須在磁碟上有metadata的副本;
5,當有“寫請求”到來時,即要改變Hadoop的檔案系統時,NameNode會首先寫editlog並主動同步到磁碟,成功後才會修改記憶體中的metadata,並且返回給用戶端,用戶端在收到成功返回的資訊後才會寫資料到具體的DataNode上去;
6,Hadoop會在磁碟上維護一個fsimage的檔案,該檔案是NameNode中metedata的鏡像;
7,fsimage不會隨時與NameNode中的metedata保持一致,而是每隔一段時間通過合并editlog中的內容來更新;
8,合并的過程是比較消耗記憶體和CPU的操作,所以Hadoop就是用SecondaryNameNode專門用於更新fsimage檔案;
下面我們看看SecondaryNameNode的工作流程:
1,SecondaryNameNode通知PrimaryNameNode切換editlog;
2,SecondaryNameNode通過HTTP協議從PrimaryNameNode獲得fsimage和editlog;
3,SecondaryNameNode將fsimage載入記憶體,然後開始合并editlog的操作;
4,SecondaryNameNode將合并後的新的fsimage發給PrimaryNameNode;
5,PrimaryNameNode收到SecondaryNameNode發過來的新的fsimage後會用新的fsimage替換舊的fsimage;
SecondaryNameNode合適觸發上述的工作流程呢?或者說checkpoint是什麼呢?滿足以下的任何條件都會觸發SecondaryNameNode的工作流程:
1,fs.checkpoint.period 指定兩次checkpoint之間最大時間間隔,預設時間為3600秒,即一個小時;
2,fs.checkpoint.size規定editlog檔案的最大值,該檔案的預設大小是64M,一旦超過這個值則強制觸發SecondaryNameNode的工作流程;
從Hadoop 2.X開始推出了Active-Backup NameNode的模式,即同時具有兩個NameNode:Active NameNode和Backup NameNode,當Acitive NameNode不能夠正常提供服務是時候,Backup NameNode就可以接替Acitive NameNode繼續為用戶端提供服務,這樣就會更有力的保證Hadoop服務不會中斷。
大家可以看出在Hadoop 1.X的版本時,整個Hadoop的正常工作極端的依賴於單一的Primary NameNode,當Primary NameNode出現問題的時候,整個Hadoop的檔案系統就無法給用戶端提供服務了,這對一些非常關鍵的應用是難以接受的,所以運行NameNode節點的機器的硬體需要非常好,例如磁碟的IO速度要非常快;