注:分析到的主要代码在
org.apache.hadoop.hdfs.server.namenode.NameNode和org.apache.hadoop.hdfs.server.namenode.FSNamesystem中
1.NameNode.main()是名字节点启动的入口,主要就是通过createNameNode方法创建一个namenode对象,创建成功后再等待它执行结束(namenode.join())
public static void main(String argv[]) throws Exception {
try {
StringUtils.startupShutdownMessage(NameNode.class, argv, LOG);
NameNode namenode = createNameNode(argv, null);
if (namenode != null)
namenode.join();
} catch (Throwable e) {
LOG.error(StringUtils.stringifyException(e));
System.exit(-1);
}
}
2.createNamenode()方法实际都做了什么?
-根据argv参数找到启动选项startOpt
-根据startOpt设置配置文件
-setStartupOption(conf, startOpt),根据startOpt的值选择不同的启动处理方式,这里大概是除了FORMAT和FINALIZE选项,其他的选项都将执行->
-执行namenode构造方法,根据conf,new一个namenode并返回,在NameNode.main中接收
public static NameNode createNameNode(String argv[],
Configuration conf) throws IOException {
if (conf == null)
conf = new Configuration();
StartupOption startOpt = parseArguments(argv);//根据argv启动选项
if (startOpt == null) {
printUsage();
return null;
}
setStartupOption(conf, startOpt);
switch (startOpt) {
case FORMAT:
boolean aborted = format(conf, true);