hdfs -get文件夹错误

时间:2018-04-12 13:53:52

标签: java hadoop hdfs

运行hdfs dfs -get命令时遇到错误:

[work@myserver ~]$ hdfs dfs -get hdfs://hadoopserver:8020/path/DataLoad/
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)

" hadoopserver"是hadoop集群的主人,它与myserver不在同一个网络中。我通过配置公共网络IP在" / etc / hosts"。

中连接它

更重要的是,这个错误只发生在获取文件夹和网络时。请看下面的两个示例:第一个是我从另一个服务器获取文件夹,该服务器与hadoopserver位于同一网络中。第二个例子是我从同一个服务器(myserver)获取文件而不是文件夹。他们都成功了。

[work@hadoopserver_2 lewis]$ hdfs dfs -get hdfs://hadoopserver:8020/path/DataLoad ./
[work@hadoopserver_2 lewis]$ du -sh DataLoad/
 1.2G   DataLoad/

[work@myserver ~]$ hdfs dfs -get hdfs://hadoopserver:8020/path/DataLoad/part-r-00375-724f4a2e-ed40-4100-8e81-6657d9dacc01.gz.parquet ./
[work@myserver ~]$ ls
part-r-00375-724f4a2e-ed40-4100-8e81-6657d9dacc01.gz.parquet

要添加最后一点,当我从外部网络获取文件夹并获取错误时,将始终创建该文件夹,有时会获取不完整的文件。

[work@myserver DataLoad]$ ls
part-r-00000-724f4a2e-ed40-4100-8e81-6657d9dacc01.gz.parquet  _SUCCESS
[work@myserver DataLoad]$ du -sh
10M .

(DataLoad中应该有很多文件,大于10M。在大多数情况下,只有一个名为" _SUCCESS"的空文件。)

1 个答案:

答案 0 :(得分:0)

我的同事解决了这个问题。我们使用hdfs --loglevel DEBUG来显示详细错误。根本原因是我只是在" / etc / hosts"中配置主服务器ip。当myserver尝试从外部网络从hadoop集群获取数据时。主服务器(默认8020端口)告诉我应该连接哪个datanode(默认50070端口)。所以我无法获取整个文件夹,因为该文件必须位于不同的datanode中。我成功地将文件放在主节点上(这是唯一的服务器)  在我的主机中配置)。

所以在我在主机中配置所有节点的公共IP之后。我可以成功获得该文件夹。