HADOOP HA 报错 - 所有 namenode 都是standby --集群报错:Operation category READ is not supported in state standb

Hadoop HA 集群出现错误,所有 NameNode 处于 standby 状态,导致读取操作不支持。通过检查 jps 输出,发现所有节点的角色分配不正确。尝试使用 `haadmin -transitionToActive --forcemanual` 强制转换 NameNode 为主动状态,但问题在重启后重现。进一步的解决方案是执行 `hdfs zkfc -formatZK` 初始化 ZooKeeper,重启后集群恢复正常。这表明问题确实源于 ZooKeeper 的配置或状态。

报错:

在这里插入图片描述
经过查看集群的jps如下:

==================== hadoop01 jps ===================
2561 FsShell
1971 ResourceManager
2452 NameNode
2606 Jps
==================== hadoop02 jps ===================
1570 NodeManager
1363 DataNode
1462 JournalNode
1303 QuorumPeerMain
1722 Jps
==================== hadoop03 jps ===================
1573 NodeManager
1366 DataNode
1465 JournalNode
1305 QuorumPeerMain
1725 Jps
==================== hadoop04 jps ===================
1458 JournalNode
1302 QuorumPeerMain
1718 Jps
1566 NodeManager
1359 DataNode
==================== hadoop05 jps ===================
1574 Jps
1295 NameNode

查看日志:
在这里插入图片描述

状况:

<
Hadoop 高可用(HA)配置中,当尝试对 HDFS 文件或目录执行 `chmod` 操作时,如果当前 NameNode 处于 Standby 状态,则会遇到如下错误: ``` Operation category READ is not supported in state standby ``` 此问题的根本原因是:在 HA 模式下,HadoopStandby NameNode 仅支持有限的只读操作,而某些元数据更改或访问操作(如 `chmod`)必须由 Active NameNode 处理[^1]。 ### 原因分析 - **NameNode 状态限制**:Standby NameNode 主要用于故障转移和日志同步,并不处理客户端的写操作或部分元数据访问请求。 - **客户端配置问题**:若客户端未正确指向 Active NameNode 或未启用自动故障转移机制(如 ZooKeeper),则可能将请求发送到 Standby NameNode,从而导致失败。 ### 解决方案 确保客户端能够正确识别并连接到 Active NameNode。以下是几种可行方法: #### 1. 使用逻辑 URI 而非直接 IP 地址 在 HDFS 客户端配置中使用逻辑名称(如 `hdfs://mycluster/`),而不是直接指定某个 NameNode 的地址(如 `hdfs://nn1:8020/`)。这种方式依赖于 `hdfs-site.xml` 中配置的 HA 服务名称解析。 ```xml <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>host1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>host2:8020</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> ``` 该配置使客户端能通过 ZooKeeper 自动切换到 Active NameNode [^1]。 #### 2. 显式检查并切换 NameNode 状态 通过命令行工具手动确认当前 Active NameNode: ```bash hdfs haadmin -getServiceState nn1 ``` 若返回 `standby`,则应将操作发送至另一个节点,或使用以下命令手动切换状态: ```bash hdfs haadmin -failover nn1 nn2 ``` #### 3. 在程序中配置 Failover 支持 若使用 Java API 编程访问 HDFS,需确保配置了正确的 Failover Proxy Provider,以实现自动切换功能: ```java Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://mycluster"); FileSystem fs = FileSystem.get(conf); ``` 这样即使当前连接的 NameNodeStandby 状态,也会自动重定向到 Active 节点 [^1]。 ### 总结 Hadoop 的 `chmod` 命令在 Standby NameNode 上失败是由于其状态限制所致。为避免此类问题,应确保客户端始终连接到 Active NameNode,可通过配置逻辑 URI、使用 ZooKeeper 自动故障转移机制或显式切换 NameNode 状态等方式实现。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值