在建立hadoop集群时,我很难在docker覆盖网络中发布端口。我想用以下命令发布hadoop主容器的一些端口:
docker run -itd --name hadoop-master --hostname hadoop-master --network hadoop \
-p 8088:8088 -p 50070:50070 -p 50090:50090 \
-p 8080:8080 -p 18080:18080 -p 4040:4040 \
hadoop-img但出于某种原因,只有:18080端口可以通过浏览器访问。我确信所有服务都在码头集装箱内运行。
当我在hadoop-主容器中运行时:
curl -v localhost:18080或
curl -v hadoop-master:18080我得到了相同的积极响应(控制台上显示了一些html ),但当我想对端口执行相同的操作时,假设:50070 (或任何其他已发布的)只能通过主机名(即:
curl -v hadoop-master:50070 -> displays correct html response但是当使用localhost时,例如:
curl -v localhost:50070我得到:
About to connect() to localhost port 50070 (#0)
* Trying ::1...
* Connection refused
* Trying 127.0.0.1...
* Connection refused
* Failed connect to localhost:50070; Connection refused
* Closing connection 0
curl: (7) Failed connect to localhost:50070; Connection refused因此,我的猜测是,端口:50070没有正确地映射到本地主机中的坞容器中。我不知道为什么会这样。由于某些原因,端口被正确发布,而不使用覆盖网络。你能帮我解决我的问题吗?如果网络用户界面是可访问的,那就太好了。
我的hdfs-site.xml看起来是这样的:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///usr/local/hadoop/hdfs/datanode</value>
</property>
<!-- HA SETUP -->
<property>
<name>dfs.nameservices</name>
<value>hadoopcluster</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoopcluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn1</name>
<value>hadoop-master-1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoopcluster.nn2</name>
<value>hadoop-master-2:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn1</name>
<value>hadoop-master-1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoopcluster.nn2</name>
<value>hadoop-master-2:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop-jn-1:8485;hadoop-jn-2:8485;hadoop-jn-3:8485/hadoopcluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoopcluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/HDPV2/journal/node/local/data</value>
</property>
<!-- ZOOKEEPER SETUP -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181</value>
</property>
</configuration>到目前为止,我已经创建了一个基本设置,它在分散在两个docker主机上的单独容器中运行所有服务:
DFSZKFailoverController)
发布于 2020-01-20 22:00:19
不应该将hdfs-site.xml配置为使用localhost地址或主机名地址。见dfs.namenode.http-address.hadoopcluster.nnX道具
dfs.namenode.http-address默认绑定到0.0.0.0:50070,因此当您转发容器时,它将在容器之外可用。
此外,还有dfs.datanode.http.address=0.0.0.0:50075,它也不应该被触及。
你想要添加dfs.namenode.rpc-bind-host=0.0.0.0
如果namenode没有运行,那么这是一个完全不同的问题。如果没有活动的Namenode (端口18080),Spark将很好地启动。您只是不能运行需要HDFS的火花作业。
注意: NameNode、DataNode+NodeManager、ResourceManager和火花服务都应该是单独的容器(理想情况下是在不同的机器上)。否则,您只是在容器中构建一个单一的故障点,并且可能还可以使用适当的VM。
https://stackoverflow.com/questions/59819045
复制相似问题