Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对Docker容器的HTTP调用将IP重定向到Docker ID_Python_Hadoop_Docker_Ip_Hdfs - Fatal编程技术网

Python 对Docker容器的HTTP调用将IP重定向到Docker ID

Python 对Docker容器的HTTP调用将IP重定向到Docker ID,python,hadoop,docker,ip,hdfs,Python,Hadoop,Docker,Ip,Hdfs,我正在Windows10机器上运行Hadoop Docker容器。我正在尝试使用库编写一个Python程序来访问我的HDFS。我可以使用配置为“”的客户端列出文件夹内容(50070是webHDFS端口)。但是,当我试图读取文件的内容时,我收到一个错误,说明无法解析地址。在返回的错误中,主机是Docker容器“453af3bd9164”的ID,而不是我预期的“localhost”或“127.0.0.1” 我尝试过使用不同的Docker容器和不同的Python库,但仍然会遇到类似的错误。所以我猜我没

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

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

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

core-site.xml:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>
<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>
<property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</false>
</property>

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

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

docker run -h "computer-name@example.com"
我还将此属性添加到我的hdfs-site.xml中:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>
<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>
<property>
    <name>dfs.namenode.datanode.registration.ip-hostname-check</name>
    <value>false</false>
</property>

dfs.namenode.datanode.registration.ip-hostname-check
假的

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

我对hadoop一无所知,但是。。。。我很确定您永远不想在配置中使用localhost。使用真实的主机名。