众所周知,在HDFS集群中,主要有两类节点,即NameNode和DataNode节点,确切的说,一个NameNode节点,其它的所有DataNode节点。那么,HDFS集群的启动就自然而然的可以看做是一个NameNode节点的启动和所有其它的DataNode节点的启动问题了。在这里我要不得不提的是,NameNode和DataNode有各自不同的启动方式,其中,NameNode的启动方式有:format、regular、upgrade、rollback、finalize、importCheckpoint六种,DataNode的启动方式有:regular、rollback两种。关于NameNode和DataNode的各种启动方式是如何工作的,我在这里不会一一讲解,但我会在以后的博文中来详细的描述。在本文中,我将主要讲解NameNode和DataNode节点最常用的也是最基本的启动方式regular。对了,稍微提一下,NameNode在第一次启动之前,一定要先以format方式启动,然后再才能以其它的方式启动,至于为什么,请感兴趣的盆友查看我前面的博文。同时,我必须要重点重申的是,NameNode节点一定要在其它的任何DataNode节点之前启动,而且,在NameNode节点启动之后,其它的DataNode也不能马上就启动。

     OK,让我们先来看看NameNode节点的启动吧!对于NameNode中的属性:


hdp集群修改yarn内存 hdfs集群启动_工作

这之中有两个重量级的家伙server和namesystem。

Server是RPC服务器端的实现,它主要负责和远程的客户端进行通信,反序列化和序列化远程调用中的参数和返回值,而真正负责执行远程方法的则是NameNode本身。namesystem保存了所有的关于文件的元数据信息,当然还包括操作日志,负责数据的持久化来保证系统的可恢复性,必须的。NameNode启动时会先创建Server,然后再创建FSNamesystem,而在创建FSNamesystem的时候,他会加载所有的元数据信息到内存,这个过程是相当耗费时间的(这就是为什么上面提到的,NameNode节点启动之后,其它的DataNode不能马上就启动的原因)。之后,开启Server远程调用服务。但是,NameNode节点也会马上进入安全模式,等待其它DataNode节点的注册,以及统计其它DataNode节点上报的数据块Block信息。当在一定的时间间隔之内没有DataNode节点的注册和Block报告之后,此时的NameNode节点就认为集群中再也没有其它的DataNode节点了(或者是当前正常的DataNode节点),就会离开安全模式,才开始真正为客户端服务。值得注意的是,处于安全模式状态的NameNode节点是不会为客户端服务的,当有客户端请求服务时,会返回当前NameNode节点正处于安全模式的错误。

      现在,我们来谈谈DataNode节点的启动。在上面已经说到,DataNode节点必须要在NameNode节点启动之后的一个恰当时机才能启动,即要等到NameNode节点的Server服务开启之后,DataNode才能启动。对于DataNode主要有DataStorage、DataNodeProtocol、DataXceiverServer、Server四个组件,其中,DataStorage保存数据块信息,DataNodeProtocol负责调用NameNode的服务,DataXceiverServer负责数据的传输(客户端和其它DataNode),Server为客户端和其它DataNode节点服务。关于这四大组件的启动顺序以及是如何工作的,我们还是来看一张图吧:

hdp集群修改yarn内存 hdfs集群启动_工作_02


上图基本描述了NameNode节点和DataNode节点各自的启动过程,同时也反映了整个HDFS集群的启动过程以及其内部节点之间的工作机制。

     本文只是从宏观的角度阐述了HDFS集群从启动到正式为Client服务这一段时间内,NameNode和DataNode的工作过程,以后我还会更加深入细致的讨论这其中的细节问题。另外,我还要必须提到的是在HDFS集群中,除了NameNode节点和DataNode节点之外,还有另一类节点:SecondaryNameNode。SecondaryNameNode主要负责对NameNode节点的元数据进行备份。(未完待续)