Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 从集群外部访问hdfs_Hadoop_Amazon Web Services_Amazon Ec2_Hdfs_Hadoop2 - Fatal编程技术网

Hadoop 从集群外部访问hdfs

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

我在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中提供了这些选项(以及一些其他选项)


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>