我使用的是cdh5.4.1集群提供的hadoop。我面临的问题是,hdfs上有一个目录,路径是/tmp/data,它有一些csv文件,比如.csv,现在这个文件夹也出现在节点的一个(比如节点1)本地linux fs上,并且包含一个csv文件xyz.csv。
当我从node1运行以下命令:hdfs dfs-ls/tmp/data/*.csv时,我希望输出显示.csv,但是我得到一个错误:ls:`/tmp/data/xyz.csv':没有这样的文件或目录在本地linux fs上没有相同文件夹路径的其他节点上运行时,同一命令会给出正确的输出。
我的理解是,由于我使用hdfs-dfs命令,hadoop应该只查看dfs空间,而不应与本地linux-fs混淆,但这似乎是不正确的。
请说明这种行为背后的原因是什么?
2条答案
按热度按时间pgvzfuti1#
我的理解是,由于我使用hdfs dfs命令,hadoop应该只查看dfs空间,而不应与本地linux fs混淆
只有在正确设置hadoop客户机xml配置文件以使用
hdfs://
uri和notfile://
在core-site.xml中,默认值fs.defaultFS
是file://
但是,应该在cdh或hdp管理的环境中正确设置此值0kjbasz62#
在将参数传递给hdfs命令之前,您将看到bash(或您选择的任何shell)全局化和扩展通配符的效果。本地文件系统中有一个文件位于/tmp/data/xyz.csv。因此,真正被调用的命令是
hdfs dfs -ls /tmp/data/xyz.csv
. 由于xyz.csv在hdfs集群中不存在,因此报告为“找不到文件”。您可以通过将参数用单引号括起来来解决此问题,以防止全局扩展: