Hadoop NameNode啓動的資源檢查

目錄

回顧

startCommonServices

FSNamesystem

NameNodeResourceMonitor

NameNodeResourceChecker

總結

歡迎掃描關注我的公衆號!


回顧

上一篇分析了Hadoop的Rpc服務,這一篇將接着往下分析startCommonServices這個方法,先看代碼整體的流程。

startCommonServices

主要是兩步:

  • namesystem.startCommonServices

  • rpcServer.start();

 

FSNamesystem

FSNamesystem是NameNode核心成員變量用來管理元數據(實現對DataNode、Block的管理以及讀寫日誌),FSNamesystem的startCommonServices將啓動一些磁盤檢查、安全模式等一些後臺服務及線程。

1、將需要檢查的URL添加到volumes中 , 後臺有線程會一直執行hasAvailableDiskSpace來檢查

2、checkAvailableResources(); 進行資源檢查

3、NameNode啓動,進入到safemode階段,處於一個等待彙報blocks的狀態

4、彙報所有的block,用於後面判斷是否進入安全模式

5、激活BlockManager

先new一個NameNodeResourceChecker,我們進入構造方法

 

這個構造方法主要是:

1、聲明namenode容忍的磁盤大小的閾值

2、封裝好需要檢查的磁盤路徑(fsimage和edits)

3、將需要檢查的磁盤路徑通過addDirToCheck方法添加到volumes這個map集合裏面,然後在FSNameSystem中有一個NameNodeResourceMonitor線程,不斷的調用checkAvailableResources方法來檢查volumes(磁盤的資源情況)

 

 

 

NameNodeResourceMonitor

FSNamesystem的內部類,實現了Runnable,在這裏是後臺線程,不斷檢查資源的情況。

 

 

NameNodeResourceChecker

NameNodeResourceChecker是實際資源檢查的類,調用的是類裏面的hasAvailableDiskSpace方法,監控NameNode主機上的磁盤還是否可用。如果一旦發現有資源不足的情況,會使NameNode進入安全模式。如果隨後返回的狀態代表資源大小到達可使用的級別,那麼這個線程就使NameNode退出安全模式。依照這個註釋,去解讀run()方法的代碼邏輯:在一個while循環裏,首先判斷資源是否可用,如果不可用,日誌裏就會發出一個警告信息,然後調用enterSafeMode();進入安全模式。

 

總結

從上面分析可知,這一篇主要介紹分析了NameNodeResourceChecker類的構造和線程類NameNodeResourceMonitor的run方法的資源檢查。

 

歡迎掃描關注我的公衆號!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章