[英]Access hdfs from outside the cluster
我在aws上有一个hadoop集群,我正在尝试通过hadoop客户端从集群外部访问它。 我可以成功地hdfs dfs -ls
并查看所有内容,但是当我尝试put
或get
文件时出现此错误:
Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.fs.FsShell.displayError(FsShell.java:304)
at org.apache.hadoop.fs.FsShell.run(FsShell.java:289)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
at org.apache.hadoop.fs.FsShell.main(FsShell.java:340)
我在集群和本地计算机上都安装了hadoop 2.6.0。 我已将群集的conf文件复制到本地计算机,并在hdfs-site.xml中具有这些选项(以及其他一些选项)。
<property>
<name>dfs.client.use.datanode.hostname</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>
我的core-site.xml在集群和客户端中都包含一个属性:
<property>
<name>fs.defaultFS</name>
<value>hdfs://public-dns:9000</value>
<description>NameNode URI</description>
</property>
我发现了类似的问题,但无法找到解决方案。
SSH进入那台计算机怎么样?
我知道这是一个非常糟糕的主意,但是要完成工作,您可以先使用scp
将文件复制到计算机上,然后SSH到该群集/主hdfs dfs -put
上, hdfs dfs -put
对复制的本地文件执行hdfs dfs -put
。
您也可以通过脚本自动执行此操作, 但这只是为了立即完成工作。
等待其他人回答以了解正确的方法!
运行hadoop fs -get时,我的集群遇到类似的问题,我可以解决它。 只需使用本地主机上的FQDN(完全合格域名)来检查所有数据节点是否可解析。 在我的情况下,nc命令成功使用了数据节点的ip地址,但没有使用主机名。 运行以下命令:对于cat /<host list file>
i; 做nc -vz $ i 50010; 完成50010是默认的datanode端口
当您运行任何hadoop命令时,它会尝试使用FQDN连接到数据节点,多数民众赞成在该地方给出了这个奇怪的NPE。
在下面执行以下操作,并运行hadoop命令export HADOOP_ROOT_LOGGER = DEBUG,控制台
您会在尝试连接到任何数据节点进行数据传输时看到此NPE出现。
我有一个Java代码,它也在使用API进行hadoop fs -get,那里更加清晰
java.lang.Exception:java.nio.channels.UnresolvedAddressException
让我知道这是否对您有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.