3.3、启动各种服务
HDFS集群进程启动的大概顺序为:启动所有的JournalNodeà启动nn1和nn2à启动所有DataNode。具体详细步骤如下:
(1) 启动所有JournalNode
在所有的配置有JournalNode的服务节点上,以我的配置就是在Hadoop-slave02、hadoop-slave03和hadoop-slave04上分别执行:
$HADOOP_HOME/sbin/hdfs-daemon.sh startjournalnode
(2) 初始化JournalNode
此步骤要注意的是,如果你是将非HA HDFS的集群转化成为HA HDFS那么这一步骤就需要,如果都是HA HDFS就不需要执行此步骤。该步骤的主要作用是将非HA HDFS中NameNode的edit log去初始化JourNalnodes。具体操作在nn1上执行:
$HADOOP_HOME/bin/hdfs namenode -initializeSharedEdits [-force | -nonInteractive]。
此命令默认是交互式的,需要用户输入各种YOR N,如果嫌麻烦就直接执行:
$HADOOP_HOME/bin/hdfs namenode–initializeSharedEdits –force
(3) 启动nn1和nn2
子步骤1:
进入nn1,如果是新集群则format(注意,如果不是新集群千万不要format):
$HADOOP_HOME/bin/hadoop namenode -format
子步骤2:进入nn1,接着启动nn1:
hadoop-daemon.sh start namenode
子步骤3:进入nn2,执行下面命令让nn2从nn1上将最新的FSimage信息拉回来:
注意:如果是nn2的NameNode已经是被format掉了或者是将非HA HDFS的集群转化成为HA HDFS则不需要执行这一个步骤。
$HADOOP_HOME/bin/hdfs namenode -bootstrapStandby -force
子步骤4:进入nn2,然后启动nn2:
hadoop-daemon.sh start namenode
子步骤5:启动所有的DataNode
在各个DataNode节点执行:
hadoop-daemon.sh start datanode
或者直接在nn1节点直接执行:
hadoop-daemons.sh start namenode
各个服务到现在为止已经启动完毕,主备节点都还处于StandBy状态。我们可以看到主备节点的信息:
在这里说说一个遇到的“错误”问题,我在分别启动nn1和nn2之后,还没有将其中一个切换为Acive NameNode时,在nn1和nn2的日志上都报了以下这个“错误”:
其实这个错误信息完全可以不用管,出现这个问题原因上面信息已经很明显了,只要接下来将其中一个切换成Acive NameNode就ok了。
3.4、手动切换Active NameNode
nn1和nn2启动后都处于StandBy状态,此时都不能够对外提供服务,现在需要将nn1切换为Active NameNode,进入nn1节点输入:
$HADOOP_HOME/bin/hdfs haadmin-transitionToActive nn1
切换后我们再看看50070页面,nn1已经被切换为Active了:
在来看看之前还没有切换Acive NameNode的“错误”信息已经消失了,下面分别是nn1和nn2的日志信息,非常正常:
另外,如果你现在想将nn2转化为Acive NameNode,则在进入nn2所在节点,输入命令:
$HADOOP_HOME/bin/hdfs haadmin-failover --forcefence --forceactive nn1 nn2
看看nn2上的日志: