hadoop fs -ls 结果 "no such file or directory"

hadoop fs -ls results in "no such file or directory"

我已经为 10 节点集群安装并配置了 Hadoop 2.5.2。 1 作为主节点,其他节点作为从节点。

我在执行 hadoop fs 命令时遇到问题。 hadoop fs -ls 命令在 HDFS URI 上运行良好。在没有 HDFS URI

的情况下使用时,它会给出消息 "ls: `.': No such file or directory"
ubuntu@101-master:~$ hadoop fs -ls
15/01/30 17:03:49 WARN util.NativeCodeLoader: Unable to load native-hadoop 
ibrary for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory
ubuntu@101-master:~$ 

然而,使用 HDFS URI 执行相同的命令

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/
15/01/30 17:14:31 WARN util.NativeCodeLoader: Unable to load native-hadoop      
library for your platform... using builtin-java classes where applicable
Found 3 items
drwxr-xr-x   - ubuntu supergroup          0 2015-01-28 12:07 hdfs://101-master:50000/hvision-data
-rw-r--r--   2 ubuntu supergroup   15512587 2015-01-28 11:50 hdfs://101-master:50000/testimage.seq
 drwxr-xr-x   - ubuntu supergroup          0 2015-01-30 17:03 hdfs://101-master:50000/wrodcount-in
 ubuntu@101-master:~$ 

由于此行为,我在 MapReduce 程序中遇到异常。 jarlib 指的是 HDFS 文件位置,而我希望 jarlib 指的是存储在 Hadoop 节点上的本地文件系统中的 jar 文件。

这里有几件事在起作用;基于 "jarlib is referring to the HDFS file location",听起来您确实将 HDFS 路径设置为 fs.default.name,这确实是典型设置。因此,当您键入 hadoop fs -ls 时,这确实是在尝试查看 HDFS 内部,除了它在您的 current working directory 中查找,它应该类似于 hdfs://101-master:50000/user/ubuntu。不幸的是,该错误消息有些令人困惑,因为它没有告诉您 . 被解释为完整路径。如果你 hadoop fs -mkdir /user/ubuntu 那么 hadoop fs -ls 应该开始工作了。

此问题与您的"jarlib"问题无关;每当您想引用显式存储在本地文件系统中的文件,但路径通过 Hadoop 的 Path 解析时,您只需添加 file:/// 以强制 Hadoop 引用本地文件系统。例如:

hadoop fs -ls file:///tmp

尝试将您的 jar 文件路径作为 fille file:///path/to/your/jarfile 传递,它应该可以工作。

您看到的行为是预期的,让我解释一下您在使用 hadoop fs 命令时发生了什么。

命令的语法是这样的:hadoop fs -ls [path]

默认情况下,当你不为上述命令指定[path]时,hadoop将路径扩展到hdfs中的/home/[username];其中 [username] 被替换为正在执行命令的 linux 用户名。

所以,当你执行这条命令时:

ubuntu@xad101-master:~$ hadoop fs -ls

您看到错误的原因是 ls: '.': No such file or directory 因为 hadoop 正在寻找这条路径 /home/ubuntu,似乎这条路径在 hdfs 中不存在。

这个命令的原因:

ubuntu@101-master:~$ hadoop fs -ls hdfs://101-master:50000/

正在工作,因为您已明确指定 [path] 并且是 hdfs 的根目录。你也可以用这个做同样的事情:

ubuntu@101-master:~$ hadoop fs -ls /

它会自动评估到 hdfs 的根目录。

希望这能清除您在执行 hadoop fs -ls 命令时看到的行为。

因此,如果要指定本地文件系统路径,请使用 file:/// url 方案。

WARN util.NativeCodeLoader:无法为您的应用程序加载 native-hadoop 库 平台...在适用的地方使用内置-java 类

将在 .bashrc 文件中使用此命令删除此错误:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native"

------------------------------------------------------
/usr/local/hadoop is location where hadoop is install
-------------------------------------------------------

这与缺少用户主目录有关。一旦我在 hdfs 下为登录用户创建了主目录,它就像一个魅力..

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/{loggedin user}

hdfs dfs -ls

这个方法解决了我的问题。

Hadoop中的用户目录是(在HDFS中)

/user/<your operational system user>

如果您收到此错误消息,可能是因为您尚未在 HDFS 中创建用户目录。

使用

hadoop fs -mkdir -p /user/<current o.p. user directory>

要查看您当前的操作系统用户,请使用:

id -un

hadoop fs -ls 它应该开始工作了...