如何修复简单的hdfs HA群集中的“未启用HA”错误

时间:2019-07-31 16:21:55

标签: docker hdfs hadoop2

我的培训任务是使用2个具有 hdfs 的Docker容器构建 HA集群。我从映像“ sequenceiq / hadoop-docker ”(具有hadoop版本2.7.0)创建了2个docker容器。我尝试实现“ 共享存储”架构(根据https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithNFS.html)。我使用的是/ volume文件夹,而不是nfs共享文件夹,它是我的docker的卷,在运行命令期间安装到两个容器中。两个容器都对/ volume具有写/读权限。我在core-site.xml和hdfs-site.xml中进行了配置。另外,我在两个容器之间通过ssh设置了无密码访问。但是“ $HADOOP_PREFIX/bin/hdfs namenode -format”命令失败,并显示以下消息:

19/07/31 11:50:14 INFO namenode.FSNamesystem: HA Enabled: false
19/07/31 11:50:14 WARN namenode.FSNamesystem: Configured NNs:

19/07/31 11:50:14 ERROR namenode.FSNamesystem: FSNamesystem initialization failed.
java.io.IOException: Invalid configuration: a shared edits dir must not be specified if HA is not enabled.

运行“ $HADOOP_PREFIX/sbin/hadoop-daemon.sh start namenode”的结果相同 在 nn1 nn2 名称节点别名配置(“已配置的NN:”之后的空字符串)中,似乎出现了错误。但是我根据教程进行了配置! 请帮助我在我的hdfs群集中启用HA!

这是core-site.xml:

<configuration>
      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://mycluster</value>
      </property>
  </configuration>

和hdfs-site.xml:

<configuration>
 <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <property>
        <name>dfs.nameservice</name>
        <value>mycluster</value>
    </property>

  <property>
     <name>dfs.ha.namenodes.myclaster</name>
     <value>nn1,nn2</value>
  </property>

   <property>
      <name>dfs.namenode.name.dir</name>
      <value>file:/home/hadoop/local_nn_dir</value>
    </property>

  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>nn1.mycluster.com:8020</value>
  </property>

  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>nn2.mycluster.com:8020</value>
  </property>

  <property>
     <name>dfs.namenode.http-address.mycluster.nn1</name>
     <value>nn1.mycluster.com:50070</value>
  </property>

  <property>
     <name>dfs.namenode.http-address.mycluster.nn2</name>
     <value>nn2.mycluster.com:50070</value>
  </property>

  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>file:///volume</value>
  </property>

<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/dn_dir</value>
</property>

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

</configuration>

两个Docker容器都有相同的配置xml文件,但是在 / etc / hosts中配置的“ nn1.mycluster.com ”和“ nn2.mycluster.com 分别指向localhost和另一个Docker容器。

1 个答案:

答案 0 :(得分:0)

我解决了一个问题。 hdfs-site.xml中有2个错别字: “ dfs.nameservice”代替“ dfs.nameservices”,“ dfs.ha.namenodes.myclaster”代替“ dfs.ha.namenodes.mycluster”。 Сonclusion:配置的准确性是第一位的!