NameNode之间共享数据(NFS 、Quorum Journal Node(用得多)) node
两个NameNode为了数据同步,会经过一组称做JournalNodes的独立进程进行相互通讯。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变动信息,而且一直监控edit log的变化,把变化应用于本身的命名空间。standby能够确保在集群出错时,命名空间状态已经彻底同步了。 linux
Hadoop中的NameNode比如是人的心脏,很是重要,绝对不能够中止工做。在hadoop1时代,只有一个NameNode。若是该NameNode数据丢失或者不能工做,那么整个集群就不能恢复了。这是hadoop1中的单点问题,也是hadoop1不可靠的表现,如图1所示。hadoop2就解决了这个问题。 服务器
图1 架构
hadoop2.2.0(HA)中HDFS的高可靠指的是能够同时启动2个NameNode。其中一个处于工做状态,另外一个处于随时待命状态。这样,当一个NameNode所在的服务器宕机时,能够在数据不丢失的状况下,手工或者自动切换到另外一个NameNode提供服务。 oop
这些NameNode之间经过共享数据,保证数据的状态一致。多个NameNode之间共享数据,能够经过Nnetwork File System或者Quorum Journal Node。前者是经过linux共享的文件系统,属于操做系统的配置;后者是hadoop自身的东西,属于软件的配置。 spa
咱们这里讲述使用Quorum Journal Node的配置方式,方式是手工切换。 操作系统
集群启动时,能够同时启动2个NameNode。这些NameNode只有一个是active的,另外一个属于standby状态。active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务,如图2所示。 进程
图2 hadoop
在一个典型的HA集群中,每一个NameNode是一台独立的服务器。在任一时刻,只有一个NameNode处于active状态,另外一个处于standby状态。其中,active状态的NameNode负责全部的客户端操做,standby状态的NameNode处于从属地位,维护着数据状态,随时准备切换。 资源
两个NameNode为了数据同步,会经过一组称做JournalNodes的独立进程进行相互通讯。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程。standby状态的NameNode有能力读取JNs中的变动信息,而且一直监控edit log的变化,把变化应用于本身的命名空间。standby能够确保在集群出错时,命名空间状态已经彻底同步了,如图3所示。
图3
为了确保快速切换,standby状态的NameNode有必要知道集群中全部数据块的位置。为了作到这点,全部的datanodes必须配置两个NameNode的地址,发送数据块位置信息和心跳给他们两个。
对于HA集群而言,确保同一时刻只有一个NameNode处于active状态是相当重要的。不然,两个NameNode的数据状态就会产生分歧,可能丢失数据,或者产生错误的结果。为了保证这点,JNs必须确保同一时刻只有一个NameNode能够向本身写数据。
为了部署HA集群,应该准备如下事情:
* NameNode服务器:运行NameNode的服务器应该有相同的硬件配置。
* JournalNode服务器:运行的JournalNode进程很是轻量,能够部署在其余的服务器上。注意:必须容许至少3个节点。固然能够运行更多,可是必须是奇数个,如三、五、七、9个等等。当运行N个节点时,系统能够容忍至少(N-1)/2(N至少为3)个节点失败而不影响正常运行。
在HA集群中,standby状态的NameNode能够完成checkpoint操做,所以不必配置Secondary NameNode、CheckpointNode、BackupNode。若是真的配置了,还会报错。