我在Windows 10计算机上运行Hadoop Docker容器 . 我正在尝试使用this库编写一个Python程序来访问我的HDFS . 我可以列出文件夹内容,我的客户端配置为“http://localhost:50070 " (50070 is the webHDFS port). However, when I try to read the content of a file, I get an error saying that the address could not be resolved. In the error returned, the host is the ID of my Docker container " 453af3bd9164 " instead of " localhost " or " 127.0.0.1”,正如我所料 .
我尝试使用不同的Docker容器和不同的Python库,但仍然会遇到类似的错误 . 所以我的猜测是我没有正确配置我的Docker或Hadoop环境 . 由于我可以从我的Docker主机访问NameNode WebUI并且列表文件夹内容正常工作,我认为我的datanode配置可能是问题所在 . 当我检查WebUI时,我的datanode显示为“In Service”,因此它至少正在运行 .
如何正确配置我的环境,以便对我的HDFS datanode的HTTP调用正常工作?
核心-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 / hosts文件:
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
1 回答
经过几个小时的挖掘,我终于解决了这个问题 . 也许这对某些人来说是显而易见的,但希望我可以通过发布我的解决方案来帮助像我这样的新手 .
当我第一次运行我的docker时,我没有指定用于我的容器的主机名,因此它被分配了一个随机默认值,在本例中为453af3bd9164 . 但是,这会导致DNS查找问题,您需要确保Docker容器的主机名和docker容器的名称相同 . 所以我添加了这个标志:
我还将此属性添加到我的hdfs-site.xml:
做这两件事让我可以读/写我的datanode .