如果本地节点上存在相同的路径,HDFS也会感到困惑

时间:2017-02-02 14:03:59

标签: hadoop hdfs hadoop2

我正在使用CDH 5.4.1集群提供的hadoop。 我面临的问题是hdfs上有一个带有path / tmp / data的目录 它有一些csv文件说abc.csv 现在,同一个文件夹也出现在其中一个节点(比如节点1)本地linux fs上,并包含一个csv文件xyz.csv。

当我从node1运行以下命令时:hdfs dfs -ls /tmp/data/*.csv我希望输出显示abc.csv然而我收到错误说 ls:`/tmp/data/xyz.csv':没有这样的文件或目录 当在其本地linux fs上没有相同文件夹路径的其他节点上运行时,相同的命令会提供正确的输出。

我的理解是,因为我使用的是hdfs dfs命令,hadoop应该只在dfs空间查找而不要与本地linux fs混淆,但这似乎是不正确的。

请提供有关此行为背后原因的指示?

2 个答案:

答案 0 :(得分:2)

在将参数传递给HDFS命令之前,您正在看到Bash(或任何您选择的shell)的效果,并且会扩展通配符。您的本地文件系统上有一个文件/tmp/data/xyz.csv。因此,真正被调用的命令是hdfs dfs -ls /tmp/data/xyz.csv。由于您的HDFS群集中不存在xyz.csv,因此报告为未找到文件。

您可以通过将参数包装在单引号中来解决此问题,以防止全局扩展:

> # local file system
> ls /tmp/data/*.csv
/tmp/data/xyz.csv

> # attempting to check HDFS, but wildcard expansion happens before invoking command
> hdfs dfs -ls /tmp/data/*.csv
ls: `/tmp/data/xyz.csv': No such file or directory

> # wrap in single quotes to prevent globbing expansion
> hdfs dfs -ls '/tmp/data/*.csv'
-rw-r--r--   3 naurc001 supergroup          0 2017-02-02 11:52 /tmp/data/abc.csv

答案 1 :(得分:1)

  

我的理解是,因为我使用hdfs dfs命令hadoop应该只在dfs空间查找而不要与本地linux fs混淆

仅当您正确设置Hadoop客户端XML配置文件以使用hdfs:// URI而不是file://

在core-site.xml中,默认值fs.defaultFSfile://

此值应在CDH或HDP托管环境中正确设置,但