Hadoop fs-put有DataStreamer异常java.nio.channels.UnsolvedAddressException

Hadoop fs-put有DataStreamer异常java.nio.channels.UnsolvedAddressException,hadoop,docker-compose,Hadoop,Docker Compose,我已经启动了以下docker容器 namenode datanode1 datanode2 datanode3 当我尝试按如下方式将文件放入HDFS时,会出现此错误 hdfs dfs -put /tmp/airline-2008.csv.bz2 hdfs://namenode.bigdatacluster.com:8020/data/ 17/09/28 22:49:01警告hdfs.DataStreamer:DataStreamer异常 java.nio.channels.uns

我已经启动了以下docker容器

namenode  
datanode1  
datanode2  
datanode3
当我尝试按如下方式将文件放入HDFS时,会出现此错误

hdfs dfs -put /tmp/airline-2008.csv.bz2 hdfs://namenode.bigdatacluster.com:8020/data/
17/09/28 22:49:01警告hdfs.DataStreamer:DataStreamer异常 java.nio.channels.unsolvedAddressException 位于sun.nio.ch.Net.checkAddress(Net.java:101) 位于sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) 位于org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:192) 位于org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531) 位于org.apache.hadoop.hdfs.DataStreamer.createSocketForPipeline(DataStreamer.java:226) 位于org.apache.hadoop.hdfs.DataStreamer.createBlockOutputStream(DataStreamer.java:1591) 位于org.apache.hadoop.hdfs.DataStreamer.nextBlockOutputStream(DataStreamer.java:1547) 在org.apache.hadoop.hdfs.DataStreamer.run(DataStreamer.java:658)上,输入: java.nio.channels.unsolvedAddressException

从Oracle java文档

Unchecked exception thrown when an attempt is made to invoke a network operation upon an unresolved socket address
这意味着hdfs URL中使用的主机名namenode.bigdatacluster.com未解析为IP地址。您可以通过将主机到IP映射添加到
/etc/hosts
文件来解决此问题。

来自Oracle java文档

Unchecked exception thrown when an attempt is made to invoke a network operation upon an unresolved socket address

这意味着hdfs URL中使用的主机名namenode.bigdatacluster.com未解析为IP地址。您可以通过将主机到IP映射添加到
/etc/hosts
文件来解决此问题。

您是对的。我也解决了这个问题。docker discovery服务中的嵌入式DNS可以解析这些DNS条目,但HDFS API调用在discovery service point上从未到达该点,因此会失败。我没有在{/etc/hosts}中添加条目(因为IP在每次重新启动时都会改变),而是为所有机器配置了一个虚拟网络,让它们相互通信,并修改了core-site.conf文件以使用该网络上的机器地址。你是对的。我也发现了这一点。docker discovery服务中的嵌入式DNS可以解析这些DNS条目,但HDFS API调用在discovery service point上从未到达该点,因此会失败。我没有在{/etc/hosts}中添加条目(因为IP在每次重新启动时都会发生变化),而是为所有机器配置了一个虚拟网络,使其能够相互通信,并修改了core-site.conf文件以使用该网络上的机器地址。