Hadoop 从集群外部访问hdfs
我在aws上有一个hadoop集群,我试图通过hadoop客户端从集群外部访问它。我可以成功地Hadoop 从集群外部访问hdfs,hadoop,amazon-web-services,amazon-ec2,hdfs,hadoop2,Hadoop,Amazon Web Services,Amazon Ec2,Hdfs,Hadoop2,我在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.FsShe
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中提供了这些选项(以及一些其他选项)
dfs.client.use.datanode.hostname
真的
dfs.permissions.enable
假的
My core-site.xml在集群和客户端中都包含一个属性:
<property>
<name>fs.defaultFS</name>
<value>hdfs://public-dns:9000</value>
<description>NameNode URI</description>
</property>
fs.defaultFS
hdfs://public-dns:9000
名称节点URI
我发现了类似的问题,但没能找到解决办法。你用SSH连接到那台机器上怎么样 我知道这是一个非常糟糕的想法,但为了完成工作,您可以首先使用
scp
在机器上复制该文件,然后使用SSH将其复制到集群/主机中,并对复制的本地文件执行hdfs dfs-put
您也可以通过脚本自动执行此操作,不过,这只是为了暂时完成工作。
等待别人回答,知道正确的方法 在运行hadoop fs-get时,我的集群也遇到了类似的问题,我可以解决它。只需检查是否所有数据节点都可以从本地主机使用FQDN(完全限定域名)解析。在我的例子中,nc命令成功地使用了数据节点的ip地址,但没有使用主机名。 运行以下命令: 对于
cat/
中的i;do nc-vz$i 50010;完成
50010是默认的数据节点端口
当您运行任何hadoop命令时,它都会尝试使用FQDN连接到数据节点,这就是它给出这个奇怪NPE的地方
执行下面的导出并运行hadoop命令
导出HADOOP\u ROOT\u LOGGER=DEBUG,控制台
当NPE试图连接到任何数据节点进行数据传输时,您将看到它的出现
我有一个java代码,它也在使用API执行hadoop fs-get,在那个里,异常更加清晰
java.lang.Exception:java.nio.channels.UnsolvedAddressException
如果这对你有帮助,请告诉我 这个问题中没有足够的细节来帮助您。您是如何在本地计算机上安装hadoop命令行实用程序的?以及您的
核心站点.xml
?因此。。。我在网上找不到任何真正有帮助的东西。另一种方法是通过SSH连接到集群来运行所有hdfs-dfs
命令。感谢您的尝试。我也找不到任何内容。我有一个想法,尽管您可以访问端口9000处的namenode来运行hdfs dfs-ls
命令来获取文件元数据,但您还需要访问所有数据节点才能执行-get
或-put
。我想这就是错误所在,尽管我觉得奇怪的是,这将是一个空指针例外,事实上,这就是我最终所做的,因为我找不到解决方案。谢谢你的回答!
<property>
<name>fs.defaultFS</name>
<value>hdfs://public-dns:9000</value>
<description>NameNode URI</description>
</property>