2016-02-10 94 views
0

我在aws上有一个hadoop群集,我试图通过hadoop客户端从群集外部访问它。我可以成功hdfs dfs -ls和看到所有的内容,但是当我尝试putget文件我得到这个错误:从群集外部访问hdfs

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> 

我的核心-site.xml中包含一个单一的财产集群和客户端:

<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://public-dns:9000</value> 
    <description>NameNode URI</description> 
</property> 

我发现类似的问题,但没能找到解决这个。

+0

这个问题没有足够的细节来帮助你。你是如何在本地机器上安装hadoop命令行工具的? –

+0

和你的'core-site.xml'? –

+0

所以...我找不到任何真正的在线帮助。另一种方法是通过SSH进入集群来运行所有'hdfs dfs'命令。 –

回答

0

你如何通过SSH进入该机器?

我知道这是一个非常糟糕的主意但要完成工作,你可以使用scp机器上的文件,然后SSH先复制到群/主,做对复制的本地文件hdfs dfs -put

您也可以通过脚本自动执行此操作,但再次,这只是为了完成目前的工作。

等待别人回答,知道正确的方法!

+1

事实上这是我最终做的,因为我找不到解决方案。感谢您的回答! –

+0

如果您想要:您可以接受它 –

0

我在运行hadoop fs -get时遇到了类似的问题,我可以解决它。只需使用本地主机的FQDN(完全限定域名)来检查所有数据节点是否可以解析。在我的情况下,nc命令成功地使用ip地址作为数据节点,但不使用主机名。 运行以下命令: for i in cat /<host list file>;做nc -vz $ i 50010;完成 50010是默认数据节点端口

当您运行任何hadoop命令时,它尝试使用FQDN连接到数据节点,并在那里提供这个奇怪的NPE。

下面做出口和运行Hadoop的命令 出口HADOOP_ROOT_LOGGER = DEBUG,控制台

你会看到当它试图连接到任何数据节点的数据传输这个NPE来。

我有一个java代码这也是做Hadoop的FS -get使用API​​和那里,例外的是更清晰的

java.lang.Exception的:java.nio.channels.UnresolvedAddressException

让我知道如果这对你有帮助。