【hadoop二次开发】对namenode的启动流程的总结
009-hadoop二次开发
NameNode启动流程首先在源码文件NameNode.java中的main函数中,
主要基于createNameNode方法,进入该方法后,根据参数,进行模式匹配,匹配到default,
进入NameNode构造函数,会在createHAContext方法(在FSNamesystem.java源码文件中)中启动一些回调函数,
比如startActiveServices()函数,开启守护线程this.nnrmthread = new Daemon(new NameNodeResourceMonitor());对磁盘资源进行监控,以及判断是否进入安全模式
然后首先进入初始化流程,如果当前角色是NameNode启动http服务,然后加载元数据,进行元数据的替换等操作,然后rpc的创建,最后启动startCommonServices
在源码文件NameNode.java中startCommonServices方法中namesystem.startCommonServices(conf, haContext);进入,
在源码文件FSNamesystem.java的startCommonServices(Configuration conf, HAContext haContext)方法中创建nnResourceChecker = new NameNodeResourceChecker(conf);磁盘监控类,
在源码文件NameNodeResourceChecker.java中NameNodeResourceChecker方法中监控谁放入HashMap中,
这样后台守护线程不断去监控NameNodeResourceChecker的内容,以及进行磁盘资源的检查,然后进行数据块汇报,汇报completed状态的数据块,
在汇报过程中进行判断是否需要离开安全模式,还是进入安全模式 ,并且进入安全模式和离开安全模式都有一定的条件;还有一个磁盘是否进入安全模式的检查每隔1s的while循环。