Hadoop2.6.5源码分析-NameNode核心启动流程

1. 概述

我们要分析HDFS-NameNode的启动流程,就得从启动脚本开始一步步分析,当然开始之前,我们需要编译Hadoop的源码,具体的编译流程请参考我另外一篇博客 hadoop2.6.5源码编译

2. start-dfs.sh

2.1. 介绍

我们启动Hadoop在2.6版本是通过 start-dfs.sh 来启动的。
start-dfs.sh 的使用说明为 usage="Usage: start-dfs.sh [-upgrade|-rollback] [other options such as -clusterId]"
当不传递任何参数的时候,该脚本会依次启动 NameNodeDataNodesSecondaryNamenodeJournalNodesZKFailoverControllers
这里我们只看NameNode.

2.2. 分析脚本源码

这里主要就是加载一下配置文件,获取Namenode配置节点,并调用 hadoop-daemons.sh脚本来运行核心的 hdfs start namenode。

我们来看下 bin/hdfs 脚本,核心脚本如下:

发现直接会去启动 org.apache.hadoop.hdfs.server.namenode.NameNode 这个类,剩下的我们可以直接看 hadoop 该类的main()方法源码了。

3. org.apache.hadoop.hdfs.server.namenode.NameNode源码

3.1. main方法

其中核心的代码是 NameNode namenode = createNameNode(argv, null);

3.2. createNameNode(String argv[], Configuration conf) 方法

大致上上面就是检查一下配置文件,输出一些日志。然后核心的是 switch 代码块中,根据启动参数来判断具体要做对应的事情,然而我们调用 start-dfs.sh -> hdfs start namenode 是没有带任何参数的,所以这里直接回调用 default 中的代码块,这中间最核心的是 new NameNode(conf)

3.3. NameNode构造方法

createNameNode 方法中调用的NameNode构造方法,这其中最核心的是 initialize(conf); 方法,这就开始真正的NameNode启动核心流程的最重要方法了。

3.4. initialize 方法

4. 总结

整个启动流程不是特别复杂,其实就是启动一个httpServer来提供HDFS Web界面,然后启动一个RPCServer,一堆后台线程,检查磁盘空间和SafeMode控制。启动这些组件启动完成,就可以让Datanode等其他组件之后来找NameNode注册,让NameNode感知到集群的所有DataNode。

原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]

本文链接地址: http://www.loserzhao.com/bigdata/hadoop2-6-5-source-analysis-namenode-core-start-process.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

使用新浪微博登陆