首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker覆盖网络只发布一些列出的端口

Docker覆盖网络只发布一些列出的端口
EN

Stack Overflow用户
提问于 2020-01-20 08:00:59
回答 1查看 201关注 0票数 0

在建立hadoop集群时,我很难在docker覆盖网络中发布端口。我想用以下命令发布hadoop主容器的一些端口:

代码语言:javascript
复制
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-主容器中运行时:

代码语言:javascript
复制
curl -v localhost:18080

代码语言:javascript
复制
curl -v hadoop-master:18080

我得到了相同的积极响应(控制台上显示了一些html ),但当我想对端口执行相同的操作时,假设:50070 (或任何其他已发布的)只能通过主机名(即:

代码语言:javascript
复制
curl -v hadoop-master:50070 -> displays correct html response

但是当使用localhost时,例如:

代码语言:javascript
复制
curl -v localhost:50070

我得到:

代码语言:javascript
复制
 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看起来是这样的:

代码语言:javascript
复制
<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)

  • 3

  • 3 x动物园管理员容器

  • 3 x日志节点容器

  • 2 x主容器(资源管理器、namenode、HistoryServer和x从容器(datanode和nodemanager) )
EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59819045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档