【问题标题】:HTTP Call to Docker Container redirects IP to Docker ID对 Docker 容器的 HTTP 调用将 IP 重定向到 Docker ID
【发布时间】:2017-01-04 19:10:48
【问题描述】:

我在 Windows 10 机器上运行 Hadoop Docker 容器。我正在尝试使用this 库编写一个 Python 程序来访问我的 HDFS。我可以使用配置了“http://localhost:50070”的客户端列出文件夹内容(50070 是 webHDFS 端口)。但是,当我尝试读取文件的内容时,我收到一条错误消息,指出无法解析地址。在返回的错误中,主机是我的 Docker 容器“453af3bd9164”的 ID,而不是我所期望的“localhost”或“127.0.0.1”。

我尝试过使用不同的 Docker 容器和不同的 Python 库,但仍然遇到类似的错误。所以我的猜测是我没有正确配置我的 Docker 或 Hadoop 环境。由于我可以从我的 Docker 主机访问 NameNode WebUI 并且列出文件夹内容正常工作,我认为我的数据节点配置可能是问题所在。当我通过 WebUI 检查时,我的数据节点显示为“服务中”,因此它至少正在运行。

如何正确配置我的环境,以便对我的 HDFS 数据节点的 HTTP 调用正常工作?

核心站点.xml:

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

hdfs-site.xml:

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.datanode.http.address</name>
    <value>0.0.0.0:50075</value>
  </property>
</configuration>

等/主机:

127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 453af3bd9164
192.168.56.1 192.168.56.1

【问题讨论】:

  • 我对 hadoop 的看法不为零,但是.... 我很确定您永远不想在配置中使用 localhost。使用真实的主机名。

标签: python hadoop docker ip hdfs


【解决方案1】:

经过数小时的挖掘,我终于解决了这个问题。也许这对某些人来说是显而易见的,但希望我可以通过发布我的解决方案来帮助像我这样的菜鸟。

当我第一次运行我的 docker 时,我没有为我的容器指定一个主机名,所以它被分配了一个随机的默认值,在这种情况下是 453af3bd9164。但是,这会导致 DNS 查找问题,您需要确保 Docker 容器的主机名称和 docker 容器的名称相同。所以我添加了这个标志:

docker run -h "computer-name@example.com"

我还将此属性添加到我的 hdfs-site.xml:

<property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</false>
</property>

做这两件事让我可以读/写我的数据节点。

【讨论】:

    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 2020-12-10
    • 2017-05-07
    • 1970-01-01
    • 2017-02-25
    • 2021-12-27
    • 1970-01-01
    • 2017-11-18
    相关资源
    最近更新 更多