我在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)
我的集群和本地机器上都安装了hadoop2.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>
my core-site.xml在集群和客户端中都包含一个属性:
<property>
<name>fs.defaultFS</name>
<value>hdfs://public-dns:9000</value>
<description>NameNode URI</description>
</property>
我发现了类似的问题,但没能找到解决办法。
2条答案
按热度按时间t9eec4r01#
你用ssh连接那台机器怎么样?
我知道这是一个非常糟糕的主意,但要完成这项工作,你可以先在机器上用
scp
然后ssh到集群/主机中hdfs dfs -put
在复制的本地文件上。你也可以通过一个脚本来实现自动化,不过,这只是为了暂时完成工作。
等别人回答才知道正确的方法!
mdfafbf12#
我在运行hadoop fs-get时遇到了类似的问题,我可以解决它。只需检查是否所有数据节点都可以从本地主机使用fqdn(完全限定域名)进行解析。在我的例子中,nc命令成功地使用了数据节点的ip地址,但没有使用主机名。在下面运行命令:for i in
cat /<host list file>
; do nc-vz$i 50010;done 50010是默认的数据节点端口当您运行任何hadoop命令时,它会尝试使用fqdn连接到数据节点,这就是它给出这个奇怪npe的地方。
执行下面的导出并运行hadoop命令export hadoop\u root\u logger=debug,console
当npe试图连接到任何数据节点进行数据传输时,您将看到它的出现。
我有一个java代码,它也在使用API做hadoop fs-get,在那里,异常更加清晰
java.lang.exception:java.nio.channels.unsolvedAddressException
如果这对你有帮助,请告诉我。