从概述里面大致知道了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,调用startActiveServices(),完成上述4;
细节如下:
1.FSNamesystem是个很重要的类,完成整个文件系统的第一层关系的初始化和准备第二层关系的处理。
在初始化过程中,会做好整个文件系统的准备工作,例如,做好后续datanode上报的各类准备工作,特别是初始化一个blockManager
2.在FSNamesystem.startActiveServices()中,准备一个Editlog writer;
3.启动租约管理线程;
两个比较好的介绍资料:
http://blog.youkuaiyun.com/shuhuai007/article/details/6753022
http://www.cnblogs.com/ggjucheng/archive/2013/02/04/2889386.html