落花 2024-05-03 17:37 采纳率: 0%
浏览 4
已结题

docker 部署 hadoop-HA 报错

集群:三台 zookeeper,三台hadoop

报错内容:

24/05/03 09:11:27 ERROR namenode.NameNode: Error encountered requiring NN shutdown. Shutting down immediately.
java.lang.IllegalArgumentException: Expected exactly 2 NameNodes in namespace 'mycluster'. Instead, got only 3 (NN ids were 'nn1','nn2','nn3'
        at com.google.common.base.Preconditions.checkArgument(Preconditions.java:115)
        at org.apache.hadoop.hdfs.HAUtil.getNameNodeIdOfOtherNode(HAUtil.java:168)
        at org.apache.hadoop.hdfs.HAUtil.getConfForOtherNode(HAUtil.java:195)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer.getActiveNodeAddress(EditLogTailer.java:134)
        at org.apache.hadoop.hdfs.server.namenode.ha.EditLogTailer.<init>(EditLogTailer.java:115)
        at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startStandbyServices(FSNamesystem.java:1316)
        at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.startStandbyServices(NameNode.java:1861)
        at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.enterState(StandbyState.java:58)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:909)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:884)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1610)
        at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1678)

zookeeper集群正常运行,hadoop配置文件如下:
core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</value>
    </property>
</configuration>

hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file://${hadoop.tmp.dir}/namenode</value>
        <description>NameNode directory for namespace and transaction logs storage.</description>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file://${hadoop.tmp.dir}/datanode</value>
        <description>DataNode directory</description>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>${hadoop.tmp.dir}/jn</value>
    </property>

    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2,nn3</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>master1:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>master2:8020</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn3</name>
        <value>master3:8020</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>master1:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>master2:50070</value>
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn3</name>
        <value>master3:50070</value>
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://master1:8485;master2:8485;master3:8485/mycluster</value>
    </property>

    <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>

    <property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    </property>

    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>

配置的是三台,配置文件也看了好几遍,按照他的要求删掉了一个nn3后可以了,但是为什么三个namenode就不行呢?
nn1格式化namenode的时候是成功的,说明他连接到另外两台了吧

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-03 17:37
    关注

    引自免费微信小程序:皆我百晓生

    看起来您在尝试配置一个三节点的Hadoop High Availability(HA)环境,但遇到了错误,错误信息指出期望有恰好两个NameNodes,但实际上检测到了三个。根据您的配置,您试图配置一个名为mycluster的nameservice,并且已经为每个NameNode nn1、nn2 和 nn3 分配了相应的RPC和HTTP地址。

    要解决这个问题,首先我们需要理解HDFS HA设计。在HDFS HA中,通常情况下,我们有一个活动NameNode和一个热备NameNode。这意味着在任何时候,只有两个NameNode实例在工作——一个主NameNode(Active),负责处理所有客户端请求,另一个是从NameNode(Standby),准备在主NameNode失败时接管。因此,配置文件中的dfs.ha.namenodes.mycluster属性应该只包含两个NameNode ID,而不是三个。

    为了修复此问题,请按照以下步骤操作:

    1. 删除多余的NameNode配置

      • hdfs-site.xml 文件中,找到并删除与nn3相关的所有配置,包括但不限于:
        • dfs.namenode.rpc-address.mycluster.nn3
        • dfs.namenode.http-address.mycluster.nn3
        • 可能还有其他与nn3相关的配置,例如用于 fencing 的配置等。
    2. 重新启动HDFS服务

      • 停止所有Hadoop相关服务,包括HDFS和YARN。
      • 确保ZooKeeper仍在运行。
      • 重新启动NameNode和DataNode服务。
    3. 格式化活动NameNode

      • 如果之前没有格式化过,确保至少对一个NameNode进行格式化。这将创建共享日志目录的元数据。使用命令:
        hdfs namenode -format -force -nonInteractive
        
      • 注意,这个命令应该在其中一个NameNode上执行,比如nn1,并且在执行前确认其它NameNode未处于活动状态。
    4. 启动HDFS服务

      • 使用Hadoop的start-dfs.sh脚本启动整个HDFS集群。
    5. 验证配置

      • 您可以通过访问NameNode的Web界面(默认端口50070)来检查是否成功启动,并查看状态页以确认HA是否已启用以及当前的活动和待机NameNode。

    完成上述步骤后,您的Hadoop HA集群应该会正确地运行在一个活跃的NameNode和一个备用NameNode之间切换。如果您仍然遇到问题,可能需要检查网络配置、防火墙设置或者SSH密钥对是否正确配置,以便在NameNode之间实现自动故障转移。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月15日
  • 创建了问题 5月3日

悬赏问题

  • ¥15 mySQL5.7.34安装遇到的问题
  • ¥15 结构功能耦合指标计算
  • ¥20 visual studio中c语言用ODBC链接SQL SERVER
  • ¥50 AI大模型精调(百度千帆、飞浆)
  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊