HA高可用集群namenode启动后自动停止解决办法

本文介绍了Hadoop集群启动过程中可能出现的连接错误,并提供了两种解决方案:一是调整启动步骤,二是修改start-dfs.sh文件中的启动顺序。

由于hadoop自带的启动脚本start-dfs.sh 中 journalnode的启动在namenode之后。

[root@slave1 ~]# cd /apps/hadoop-2.8.0/sbin/
[root@slave1 sbin]# vi start-dfs.sh 

原本的启动顺序是这样的(namenodes,datanodes,quorumjournal nodes)

#---------------------------------------------------------
# namenodes

NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)

echo "Starting namenodes on [$NAMENODES]"

"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
  --config "$HADOOP_CONF_DIR" \
  --hostnames "$NAMENODES" \
  --script "$bin/hdfs" start namenode $nameStartOpt


#---------------------------------------------------------
# datanodes (using default slaves file)


#---------------------------------------------------------
# secondary namenodes (if any)


#---------------------------------------------------------
# quorumjournal nodes (if any)

SHARED_EDITS_DIR=$($HADOOP_PREFIX/bin/hdfs getconf -confKey dfs.namenode.shared.edits.dir 2>&-)

case "$SHARED_EDITS_DIR" in
qjournal://*)
  JOURNAL_NODES=$(echo "$SHARED_EDITS_DIR" | sed 's,qjournal://\([^/]*\)/.*,\1,g; s/;/ /g; s/:[0-9]*//g')
  echo "Starting journal nodes [$JOURNAL_NODES]"
  "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
      --config "$HADOOP_CONF_DIR" \
      --hostnames "$JOURNAL_NODES" \
      --script "$bin/hdfs" start journalnode ;;
esac


#---------------------------------------------------------
# ZK Failover controllers, if auto-HA is enabled

如果按照这样的启动顺序启动,可能在日志中报这样的错:

2018-07-14 10:46:59,455 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: master.hadoop/192.168.1.2:8485. Already tried 9 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=10, sleepTime=1000 MILLISECONDS)
2018-07-14 10:46:59,457 WARN org.apache.hadoop.ipc.Client: Failed to connect to server: master.hadoop/192.168.1.2:8485: retries get failed due to exceeded maximum allowed retries number: 10
java.net.ConnectException: 拒绝连接
	at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
	at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
	at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)
	at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)
	at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:681)
	at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:777)
	at org.apache.hadoop.ipc.Client$Connection.access$3500(Client.java:409)
	at org.apache.hadoop.ipc.Client.getConnection(Client.java:1542)
	at org.apache.hadoop.ipc.Client.call(Client.java:1373)
	at org.apache.hadoop.ipc.Client.call(Client.java:1337)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:227)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:116)
	at com.sun.proxy.$Proxy11.getEditLogManifest(Unknown Source)
	at org.apache.hadoop.hdfs.qjournal.protocolPB.QJournalProtocolTranslatorPB.getEditLogManifest(QJournalProtocolTranslatorPB.java:246)
	at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel$13.call(IPCLoggerChannel.java:556)
	at org.apache.hadoop.hdfs.qjournal.client.IPCLoggerChannel$13.call(IPCLoggerChannel.java:553)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

解决办法一:

启动几群的时候按照这样的顺序启动:

启动顺序

1、启动zookeeper(每台都执行)
zkServer.sh status

2、启动journalnode(每台都执行)
hadoop-daemon.sh start journalnode

3、启动hdfs
start-dfs.sh

4、启动yarn
start-yarn.sh

5、启动单个结点的yarn进程
yarn-daemon.sh start resourcemanager

解决办法二:

修改hadoop配置路径下的sbin目录下的start-dfs.sh中namenode和journalnode的启动顺序(将journalnode的启动代码剪切到namenode启动代码之前)

[root@slave1 ~]# cd /apps/hadoop-2.8.0/sbin/
[root@slave1 sbin]# vi start-dfs.sh 
#---------------------------------------------------------
# quorumjournal nodes (if any)

SHARED_EDITS_DIR=$($HADOOP_PREFIX/bin/hdfs getconf -confKey dfs.namenode.shared.edits.dir 2>&-)

case "$SHARED_EDITS_DIR" in
qjournal://*)
  JOURNAL_NODES=$(echo "$SHARED_EDITS_DIR" | sed 's,qjournal://\([^/]*\)/.*,\1,g; s/;/ /g; s/:[0-9]*//g')
  echo "Starting journal nodes [$JOURNAL_NODES]"
  "$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
      --config "$HADOOP_CONF_DIR" \
      --hostnames "$JOURNAL_NODES" \
      --script "$bin/hdfs" start journalnode ;;
esac

#---------------------------------------------------------
# namenodes

NAMENODES=$($HADOOP_PREFIX/bin/hdfs getconf -namenodes)

echo "Starting namenodes on [$NAMENODES]"

"$HADOOP_PREFIX/sbin/hadoop-daemons.sh" \
  --config "$HADOOP_CONF_DIR" \
  --hostnames "$NAMENODES" \
  --script "$bin/hdfs" start namenode $nameStartOpt


#---------------------------------------------------------
# datanodes (using default slaves file)


#---------------------------------------------------------
# secondary namenodes (if any)


#---------------------------------------------------------
# ZK Failover controllers, if auto-HA is enabled

当配置 Hadoop HA 高可用集群时出现 namenode启动一个的问题,可参考以下内容来解决。 如果是启动其中一个 namenode 后没一会就挂掉,经日志可知是 NameNode 连接不上 JournalNode,超过一定次数后挂掉,且向其他节点依次发起请求均失败直至达到最大重试次数。遇到这种情况,要确保集群配置正确,排查 NameNode 与 JournalNode 之间的网络连接、端口配置等是否正常,保证 NameNode 能正常连接到 JournalNode [^2]。 在搭建过程中,正确的启动步骤很关键。要按照标准流程操作,如在 bigdata01 执行 `hdfs namenode -format` 进行格式化,使用 `start-dfs.sh` 启动 HDFS 集群,其会自动启动 Namenode、DataNode、JournalNode。对于初始化 Standby Namenode(bigdata02 仅首次执行),需引导 Standby 节点同步元数据,执行 `hdfs namenode -bootstrapStandby`,然后启动 bigdata02 的 Namenode,执行 `hadoop-daemon.sh start namenode` [^3]。 此外,NameNode 高可用搭建的整个流程都要正确完成。包括免密配置,三个节点都安装 psmisc,检查三个节点是否都安装 jdk 以及 zk,检查是否安装了 hadoop 集群,修改 `hadoop-env.sh`、`core-site.xml`、`hdfs-site.xml`,检查 `workers` 文件是否为三台服务,分发给其他两个节点,初始化 ZKFC 在 zk 中的 Znode 信息,在三台服务器上启动 journalnode,对集群进行 namenode 的格式化,启动 hdfs启动第二个 namenode 等步骤。若第二次启动,只需要正常启动 zk 和 hadoop 即可 [^1]。 ```bash # 在 bigdata01 执行格式化 hdfs namenode -format # 启动 HDFS 集群 start-dfs.sh # 在 bigdata02 仅首次执行引导 Standby 节点同步元数据 hdfs namenode -bootstrapStandby # 启动 bigdata02 的 Namenode hadoop-daemon.sh start namenode ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值