Я борюсь с публикацией портов в оверлейной сети docker при настройке кластера oop. Я хотел бы опубликовать sh некоторые из портов основного контейнера oop со следующей командой:
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. Я уверен, что все службы работают внутри контейнера docker.
Когда я нахожусь в контейнере oop -master и запускаю:
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 неправильно сопоставлен внутри контейнера docker в localhost. Я понятия не имею, почему это происходит. По некоторым причинам порты публикуются правильно, не используя оверлейную сеть. Не могли бы вы помочь мне решить мою проблему? Было бы неплохо иметь доступ к веб-интерфейсу.
мой hdfs-сайт. 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>
До сих пор я создал базовую c установку, которая запускает все службы в отдельных контейнерах, распределенных по двум docker хостам:
- 3 x контейнера zookeeper
- 3 x контейнера узлов журнала
- 2 x основных контейнера ( менеджер ресурсов, namenode, HistoryServer и DFSZKFailoverController)
- 3 x подчиненных контейнера (datanode и nodemanager)