在启动所有的进程之后,可能我们首先就是想操作一下hdfs,但是我们输入

hdfs dfs -ls

会报出这样的错误

[hadoop@h5 hadoop]$ hdfs dfs -ls
16/06/18 22:43:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory

这是什么原因呢

在操作HDFS之前,我们要对HDFS的观念模型有所了解
其实类似于linux的文件系统就是去掉了当前目录的概念。其特点如下:
- 文件名从完整的意义上讲应该是包含路径名的。只有在具有“当前目录”这样概念的操作系统里面才可以直接用文件名。是不是可以认为HDFS类似与linux的文件系统概念但是去掉了“当前目录的概念”。
- 没有当前目录的概念,但是是有目录的概念。利用ls可以列出指定了路径名的目录下面的所有文件,而且这些文件名都是连着完整的路径的。
- 需要为当前的用户设置一个Home目录,其实这个目录就是路径的起始位置,之后所有的文件都从这个home目录开始描述相对偏移量。这种感觉就像是从根目录开始,不让你用cd命令,让后操作服务器上的所有文件,其实也是可以的
- hdfs里面的文件和操作系统里面的文件没有关系了,你就认为是在另一个空间里面按照另一套规则进行描述的系统。

其实还可以为当前用户创建一个用户目录,这样用户在使用ls命令的时候如果后面没有指定路径的话,会自动的列出当前这个操作系统的用户在HDFS上的用户目录下面的内容。

hdfs -dfs -mkdir -p /user/[current-user]
[hadoop@h5 hadoop]$ hdfs dfs -mkdir -p /user/hadoop
[hadoop@h5 hadoop]$ hdfs dfs -ls
16/06/18 22:59:42 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

其中current-user是当前在操作系统中正在操作这个HDFS的用户。(我这是hadoop)
注意如果你这里用的是建立的是别的用户的话,那么你执行ls的时候还是会报这样的错误。
做个实验,把当前这个用户的目录删掉,然后建一个/user/root的目录试试

[hadoop@h5 hadoop]$ hdfs dfs -rmr /user
rmr: DEPRECATED: Please use 'rm -r' instead.
16/06/18 23:02:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
16/06/18 23:02:24 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes.
Deleted /user
[hadoop@h5 hadoop]$ hdfs dfs -ls /
16/06/18 23:02:34 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxrwx---   - hadoop supergroup          0 2016-06-18 20:28 /tmp
[hadoop@h5 hadoop]$ hdfs dfs -ls 
16/06/18 23:02:38 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory
[hadoop@h5 hadoop]$ hdfs dfs -mkdir -p /user/root
16/06/18 23:03:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@h5 hadoop]$ hdfs dfs -ls
16/06/18 23:03:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory

我们删掉了/user/hadoop之后,再执行ls就报错了

[hadoop@h5 hadoop]$ hdfs dfs -mkdir -p /user/root
16/06/18 23:03:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[hadoop@h5 hadoop]$ hdfs dfs -ls
16/06/18 23:03:32 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
ls: `.': No such file or directory

这时候我们建立/user/root目录,再执行ls就报错了。我们在用root试试看。

[root@h5 bin]# ./hdfs dfs -ls
16/06/18 23:04:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[root@h5 bin]# ./hdfs dfs -ls /
16/06/18 23:04:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
drwxrwx---   - hadoop supergroup          0 2016-06-18 20:28 /tmp
drwxr-xr-x   - hadoop supergroup          0 2016-06-18 23:03 /user

显示出来了