从概述里面大致知道了namenode该做哪些事情。下面开始分析下namenode的初始化流程。
它主要完成如下事情:
1.初始化各个重要成员变量(包括rpc服务器等),初始化FSNamesystem(加载FMImage文件)
2.创建和启动HTTP服务器;
3.启动RPC服务器;
4.启动回收站线程。
详细的代码阅读如下:
重要方法NameNode.initialize()
在initializeNamesystem()方法中,完成1;
细节如下:
(1)完成JMX初始化;
(2)进入安全模式,加载FSImage文件;
(3)初始化rpc server:
在startCommonServices()方法中:完成2和3;
细节如下:
1.根据配置文件,完成http server的监听port,再启动server;
2.启动rpc server:一个是创建一个listener线程,一个是创建一个reponder线程.
在根据主备状态实例化了一个state和获取haContext(ha上下文),最终调用haContext的startActiveServices()方法启动此namenode实例;
此haContext是NameNodeHAContext,调用startAct