http调用docker容器将ip重定向到docker id

4urapxun  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(349)

我正在Windows10机器上运行hadoop docker容器。我正试图用这个库编写一个python程序来访问我的hdfs。我可以列出我的客户端配置为“的文件夹内容”http://localhost:50070“(50070是webhdfs端口)。但是,当我试图读取文件的内容时,我得到一个错误,说地址无法解析。在返回的错误中,主机是docker容器“453af3bd9164”的id,而不是我预期的“localhost”或“127.0.0.1”。
我尝试过使用不同的docker容器和不同的python库,但仍然会遇到类似的错误。所以我猜我没有正确配置docker或hadoop环境。因为我可以从docker主机访问NameNodeWebUI,并且列出文件夹内容可以正常工作,所以我认为我的datanode配置可能是问题所在。当我检查webui时,我的datanode显示为“in service”,所以它至少正在运行。
如何正确配置环境,以便对hdfs datanode的http调用正常工作?
core-site.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>

etc/主机:

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
jm81lzqq

jm81lzqq1#

经过几个小时的反复研究,我终于解决了这个问题。也许这对某些人来说是显而易见的,但希望我能通过发布我的解决方案来帮助像我这样的noobs。
当我第一次运行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>

做这两件事允许我读/写我的数据节点。

相关问题