hadoop fs -ls导致"没有这样的文件或目录"

时间:2015-01-30 17:20:15

标签: hadoop uri hdfs

我已经为10节点集群安装并配置了Hadoop 2.5.2。 1充当masternode,其他节点充当slavenode。

我在执行hadoop fs命令时遇到问题。 hadoop fs -ls命令可以正常使用HDFS URI。它给出消息“ls:`。':没有这样的文件或目录”在没有HDFS URI的情况下使用

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文件。

5 个答案:

答案 0 :(得分:53)

您希望看到的行为,让我解释一下使用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 scheme指定本地文件系统路径。

答案 1 :(得分:9)

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

hdfs dfs -mkdir /user

hdfs dfs -mkdir /user/{loggedin user}

hdfs dfs -ls

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

答案 2 :(得分:3)

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

/user/<your operational system user>

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

使用

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

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

id -un

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

答案 3 :(得分:2)

这里有几件事情在起作用;基于“jarlib指的是HDFS文件位置”,听起来你确实将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,它应该可以正常工作。

答案 4 :(得分:-1)

WARN util.NativeCodeLoader:无法加载native-hadoop库 平台...在适用的情况下使用builtin-java类

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

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

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