我已经为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文件。
答案 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
-------------------------------------------------------