journalnode(端口8485)是在namenode后启动的。默认情况下namenode启动10s(maxRetries=10, sleepTime=1000)后journalnode还没有启动,就会报上述错误。
该配置使namenode连接journalnode最大时间增加至1000s(maxRetries=100, sleepTime=10000),假如集群节点数过多,或者网络情况不稳定,造成连接时间超过1000s,仍会导致namenode挂掉。
<!--修改core-site.xml中的ipc参数,防止出现连接journalnode服务ConnectException-->
<property>
<name>ipc.client.connect.max.retries</name>
<value>100</value>
</property>
<property>
<name>ipc.client.connect.retry.interval</name>
<value>10000</value>
</property>
2.手动分步启动 (该方式不用修改配置文件)
1 #启动hadfs,注意有的是在多个节点执行的。 2 hadoop-daemons.sh start journalnode 3 hadoop-daemon.sh start namenode #每个namenode都要执行 4 hadoop-daemon.sh start zkfc #每个namenode都要执行 5 hadoop-daemons.sh start datanode 6 #启动yarn 7 start-yarn.sh
分步启动集群的方式,因为journalnode是在namenode之前启动的,所以正常情况下一次就会连接成功,不会重试多次。
3. 先启动ha集群,报错后再单独启动namenode (该方式不用修改配置文件)
start-all.sh #启动ha集群
启动后等待一会,jps确认没有namenode,再重新单独启动namenode
hadoop-daemon.sh start namenode #挂掉的namenode节点执行
PS: 该方式减少了输入量,又解决了异常。虽然是一种不够优雅的解决方式,但确是懒人的福音。