在启用了HDFS HA的集群误删了一个NameNode解决实践

在启用了HDFS HA的集群,2个NameNode节点上一般都会部署三个角色:NameNode,JournalNode和Failover Controller。在实际生产中,我们有时会碰到一个情况,你不小心删掉了某个NameNode节点上的所有角色包括NameNode,JournalNode和Failover Controller,或者你不小心通过Cloudera Manager直接从主机管理列表里移除了该NameNode节点,然后你想再把这个节点加回去的时候,发现无论如何HDFS服务都没办法正常使用了。本文会在一个HDFS HA的CDH集群中模拟这种情况,然后尝试去解决,即先删除一个NameNode,然后如何通过配置将该NameNode重新加回到HDFS服务中。

 

 

  • 测试环境

1.CDH6.1

2.Redhat7.4

3.采用root进行操作

2

模拟异常

1.首先Fayson准备一个正常的CDH6.1的集群,并且HDFS已经启用了HA。

2.我们停止ip-172-31-9-113.ap-southeast-1.compute.internal节点上的NameNode,JournalNode和Failover Controller服务。

3.删除这三个角色,注意下表已经少了这三个角色。

4.这时HDFS服务直接报错了。

3 个验证错误。
    Quorum Journal 需要至少三个 JournalNode
    Quorum Journal 需要奇数的 Journ
<think>好的,我现在需要解决用户提出的Hadoop集群中只有单个NameNode节点的问题。用户希望配置集群以包含多个NameNode节点,或者排查为什么只显示一个的原因。让我先理清思路。 首先,根据用户提供的引用资料,Hadoop的高可用(HA)配置通常使用两个NameNode一个Active,一个Standby,通过QJM和ZKFC来管理。所以,如果集群只显示一个NameNode,可能是因为没有正确配置HA,或者配置过程中出现了问题。 接下来,我需要考虑用户可能遗漏的配置步骤。例如,是否启用HA?是否正确配置了JournalNodes?ZooKeeper的设置是否正确?这些都是常见的问题点。此外,用户提到引用[3]中提到集群有3个DataNode和2个NameNode,但问题可能出在配置文件的错误,比如hdfs-site.xml中的相关参数是否正确。 然后,用户可能需要检查日志文件,查看NameNode的启动情况。如果其中一个NameNode未能成功启动,可能是因为端口冲突,或者资源不足,比如内存分配不够。引用[4]提到两个NameNode都是Standby状态,这可能与ZooKeeper的元数据未初始化有关,需要执行hdfs zkfc -formatZK命令。 另外,用户可能没有正确配置自动故障转移,导致虽然有两个NameNode,但无法自动切换状态。需要检查是否启用了自动故障转移,并配置了正确的ZooKeeper地址。此外,网络问题也可能导致节点间通信失败,比如防火墙阻止了必要的端口,如JournalNode的8485端口或ZKFC使用的端口。 可能还需要验证配置文件中的NameNode IDs是否正确,避免配置错误导致其中一个节点不被识别。同时,检查启动脚本是否正确,确保两个NameNode都被正确启动,比如在start-dfs.sh之后是否还需要单独启动某个服务。 最后,用户可能需要参考官方文档或社区的最佳实践,确保所有配置步骤都被正确执行。如果问题依旧存在,查看日志文件中的错误信息将是最直接的排查方法。</think>### Hadoop集群配置多NameNode节点的解决方案 #### 一、排查当前NameNode数量 1. **通过Web UI验证** 访问默认端口9870的NameNode Web界面(如`http://<namenode-ip>:9870`),在页面顶部检查显示的NameNode角色(Active/Standby)和数量。若只显示单个节点,说明高可用未生效[^3]。 2. **命令行检查** 执行以下命令验证NameNode状态: ```bash hdfs haadmin -getServiceState nn1 # nn1为配置的NameNode逻辑名称 hdfs haadmin -getServiceState nn2 ``` --- #### 二、配置多个NameNode的核心步骤(高可用方案) 1. **前提条件** - 至少2台NameNode服务器 - 奇数个JournalNode(至少3台) - ZooKeeper集群(至少3台) 2. **关键配置文件修改** **`hdfs-site.xml`** 需包含以下参数: ```xml <!-- 启用HA --> <property> <name>dfs.nameservices</name> <value>mycluster</value> <!-- 集群逻辑名称 --> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> <!-- 两个NameNode逻辑ID --> </property> <!-- 配置RPC地址 --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>namenode1-host:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>namenode2-host:8020</value> </property> <!-- 配置JournalNode集群 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journalnode/data</value> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://jn1-host:8485;jn2-host:8485;jn3-host:8485/mycluster</value> </property> <!-- 启用自动故障转移 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> ``` **`core-site.xml`** 需配置ZooKeeper地址: ```xml <property> <name>ha.zookeeper.quorum</name> <value>zk1-host:2181,zk2-host:2181,zk3-host:2181</value> </property> ``` --- #### 三、常见问题排查 1. **JournalNode未启动** 检查所有JournalNode节点是否运行: ```bash jps | grep JournalNode ``` 需保证至少半数以上节点存活(如3台至少2台在线)。 2. **ZooKeeper元数据未初始化** 若两个NameNode均为Standby状态,执行: ```bash hdfs zkfc -formatZK # 初始化ZK元数据 ``` 随后重启集群:`start-dfs.sh`[^4]。 3. **防火墙/端口限制** 验证以下端口是否开放: - **JournalNode**: 8485 (TCP) - **ZKFC**: 8019-8021 (TCP) - **ZooKeeper**: 2181,2888,3888 (TCP) 4. **日志分析** 检查NameNode日志(`$HADOOP_HOME/logs/hadoop-*-namenode-*.log`),重点关注: - `Failed to connect to JournalNode`(网络问题) - `Cannot lock storage`(元数据目录权限问题) - `No valid quorum`(JournalNode存活数量不足) --- #### 四、性能优化建议 若已配置多NameNode但仍出现性能瓶颈(如引用[5]所述),可考虑: 1. **启用联邦架构(HDFS Federation)** 通过多个命名空间横向扩展 2. **调整锁机制参数** 修改`dfs.lock.numretries`和`dfs.lock.retry-interval-ms` 3. **升级硬件配置** 为NameNode分配更多内存(建议≥64GB) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值