NameNode服务端的启动过程
不知道大家是否自己搭建过Hadoop集群,如果搭建过是否还记得Hadoop NameNode的启动命令呢?下面是Linux服务器上启动NameNode的命令。
[root@hadoop01 sbin]# hadoop-daemon.sh start namenode
既然是通过hadoop-daemon.s进行启动,那么我们可以看看这个shell脚本是怎么启动NameNode的呢?
由此可知是调用hdfs的脚本的,那么我们再进去hdfs脚本一探究竟吧
从中,我们可以看出最终启动的入口是org.apache.hadoop.hdfs.server.namenode.NameNode。我们先来看看源码中关于NameNode的介绍吧。
NameNode作用分析
- 两个关键的就是
1. filename -> blocksequence (namespace)
文件到block的映射,上传的文件被切分为多个block(128m),这份映射数据就 是namespace,存储在磁盘上。
2. block -> machinelist (inodes)
block到datanode的映射,每个block都会分配给一个datanode,每个block还 有3个副本,也就是每个block对应多个datanode,这个映射数据就是inodes。 在NameNode每次启动的时候,由datanode汇报过来的。
- NameNode既指这个类,也指'NameNode server。 FSNamesystem "类实际上执行了大部分的文件系统管理。 NameNode "类本身的大部分内容是向外界展示IPC接口和HTTP服务器,以及一些配置管理。
- NameNode实现了ClientProtocol接口,这个接口允许客户端请求DFS服务。ClientProtocol不是为DFS客户端直接使用而设计的,终端用户应该使用FileSystem
- NameNode实现了DatanodeProtocol接口,被存储DFS数据库的DataNode使用。
NameNode入口
下面NameNode.main()是入口函数
由上面代码可知,createNameNode(argv, null)方法对NameNode进行实例化 ,今天就先写到这,下篇文章将继续讲解NaNode的初始化。
下面是一张NameNode启动流程的思维导图,有兴趣的关注我获取。