摘要
通过前边的文章我们已经知道,hadoop namenode启动的类org.apache.hadoop.hdfs.server.namenode.NameNode,本节内容就顺着其启动流程,查看在namenode启动的过程中其都做了哪些工作(关于一些技术细节就暂时放过)。
启动
我们通过命令
$start-dfs.sh
启动hadoop集群的namenode和datanode,在namenode启动的过程中JVM首先加载org.apache.hadoop.hdfs.server.namenode.NameNode这个类。
NameNode启动流程
从分析流程上来说我们主要关注两部分代码
static语句块,在执行主函数前
static{
HdfsConfiguration.init();
}
通过函数的名称我们也可以看出上述代码作用是初始化HDFS的配置信息。
在执行完static语句块后执行main函数,其代码如下。(分析直接写在代码的注释当中)
public static void main(String argv[]) throws Exception{
//分析传入的参数是否为帮助参数,如果是帮助的话打印帮助信息,并退出。
if(DFSUtil.parseHelpArgument(argv,NameNode.USAGE,System.out,true)){
System.exit(0);
}
try{
//格式化输出启动信息,并且创建hook(打印节点关闭信息)
StringUtils.startupShutdownMessage(NameNode.class,argv,LOG)