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方法的资源检查。

 

欢迎扫描关注我的公众号!

 

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