我的培训任务是使用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容器。
答案 0 :(得分:0)
我解决了一个问题。 hdfs-site.xml中有2个错别字:
“ dfs.nameservice
”代替“ dfs.nameservices
”,“ dfs.ha.namenodes.myclaster
”代替“ dfs.ha.namenodes.mycluster
”。
Сonclusion:配置的准确性是第一位的!