我正在使用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混淆,但这似乎是不正确的。
请提供有关此行为背后原因的指示?
答案 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.defaultFS
为file://
此值应在CDH或HDP托管环境中正确设置,但