在这里说说我在切换时遇到过的几个小问题:
在住备节点上一定要配置双向的RSA免密码登陆,不然再切换时会出错,sshfence方式不能找到旧的Active NameNode,直接被reject掉。
第二,在切换的过程中我遇到了这个错误:
这个是权限问题,解决方法是直接在core-site.xml文件添加下面权限控制选项:
<property>
<name>Hadoop.http.filter.initializers</name>
<value>org.apache.hadoop.security.AuthenticationFilterInitializer</value>
</property>
<property>
<name>hadoop.http.authentication.type</name>
<value>simple</value>
</property>
<property>
<name>hadoop.http.authentication.token.validity</name>
<value>36000</value>
</property>
<property>
<name>hadoop.http.authentication.signature.secret.file</name>
<value>/home/hadoop/hadoop-http-auth-signature-secret</value>
</property>
<property>
<name>hadoop.http.authentication.cookie.domain</name>
<value></value>
</property>
<property>
<name>hadoop.http.authentication.simple.anonymous.allowed</name>
<value>true</value>
</property>
然后建立/home/hadoop/hadoop-http-auth-signature-secret文件,并且在文件写入访问用户,我写入的是hadoop,然后将这个文件scp到各个节点,问题解决。
如果你将Active NameNode从nn1转到nn2后,在各个DataNode日志出现一个“错误”信息:
其实这个是我意料之中的“错误”信息,其实是没有任何问题的。因为,当你的Acive NameNode从nn1切换至nn2时,nn1就会被kill(即hadoop-msater中的NameNode进程会被kill掉),在上面切换日志我标注红方框的地方已经很清楚了。此时,各个DataNode还是会同时向Active NameNode和StandBy NameNode同时发送心跳信息的,因为nn1已经被kill掉了,所有会报这个信息,对系统没有任何影响,切换后正常使用,如果你重启nn1则不会再报信息了,新启动的nn1是处于StandBy模式的。
我们知道,StandByNameNode是不处理DataNode的RPC请求的,那么各个DataNode为什么还会同时向Active NameNode和StandBy NameNode同时发送心跳呢?这是因为这2个心跳的用途是不同的,各个DataNode向Active NameNode发送心跳主要是汇报数据块的状态信息,而向StandBy NameNode发心跳的主要目的是通知StandBy NameNode告诉它Active NameNode元数据发生了改变,要求StandBy NameNode去QJM区下载更改过的Edit Log信息。