HDFS就是Hadoop分布式文件系统,它是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
HDFS命令,也是对文件或者目录的增删改查,只不过对象是分布式文件系统,而不是我们通常的本地文件系统。
关于HDFS的文件操作,主要使用以下2个命令:
- hadoop fs {args}
- hdfs dfs {args}
fs和dfs的区别简要说一下,fs属于一个更抽象的概念,可以操作任何文件系统;而dfs只能操作HDFS文件系统相关(包括与Local FS间的操作)。
操作之前,切换用户(目的是command path 和权限):
sudo su - hdfs
- 列出HDFS上的文件
hdfs dfs -ls /
或者
hadoop fs -ls /
$ hdfs dfs -ls /
Found 11 items
drwxrwxrwx - yarn hadoop 0 2018-10-11 06:26 /app-logs
drwxr-xr-x - hdfs hadoop 0 2018-10-11 02:59 /apps
drwxr-xr-x - yarn hadoop 0 2018-10-11 02:58 /ats
drwxr-xr-x - hdfs hadoop 0 2018-10-11 02:58 /hdp
drwxr-xr-x - mapred hadoop 0 2018-10-11 02:58 /mapred
drwxrwxrwx - mapred hadoop 0 2018-10-11 02:58 /mr-history
drwxrwxrwx - spark hadoop 0 2018-10-11 09:02 /spark-history
drwxrwxrwx - spark hadoop 0 2018-10-11 09:02 /spark2-history
drwxr-xr-x - hdfs hadoop 0 2018-10-11 08:56 /system
drwxrwxrwx - hdfs hadoop 0 2018-10-11 08:51 /tmp
drwxr-xr-x - hdfs hadoop 0 2018-10-11 08:51 /user
或者
$ hadoop fs -ls
Found 1 items
drwx------ - hdfs hadoop 0 2018-10-11 08:51 .Trash
【注意】在HDFS中未带参数的"-ls"命名没有返回任何值,它默认返回HDFS的"home"目录下的内容。在HDFS中,没有当前目录这样一个概念,也没有cd这个命令。
- 查看 HDFS上文件占用空间
$ hadoop fs -du -h /
128.9 K /app-logs
12.4 K /apps
418.2 K /ats
892.7 M /hdp
0 /mapred
165.0 K /mr-history
0 /spark-history
0 /spark2-history
0 /system
31 /tmp
50.6 K /user
$ hadoop fs -du -s -h /
893.4 M /
- 创建目录并上传文件
$ hadoop fs -mkdir /tmp/roy
$ echo roytest > a.txt
$ hadoop fs -put ./a.txt /tmp/roy/upload.txt
- 检查刚创建的文件
$ hadoop fs -ls /tmp/roy
Found 1 items
-rw-r--r-- 3 hdfs hadoop 8 2018-10-11 09:40 /tmp/roy/upload.txt
$ hadoop fs -cat /tmp/roy/upload.txt
roytest
- 下载文件
$ hadoop fs -get /tmp/roy/upload.txt ./download.txt
$ cat download.txt
roytest
- 删除刚创建的目录和文件
$ hadoop fs -rm -r /tmp/roy
18/10/11 09:45:10 INFO fs.TrashPolicyDefault: Moved: 'hdfs://dcpcluster/tmp/roy' to trash at: hdfs://dcpcluster/user/hdfs/.Trash/Current/tmp/roy
$ hadoop fs -ls /tmp/roy
ls: `/tmp/roy': No such file or directory
- 彻底删除刚创建的文件(不放入回收站)
hdfs dfs -rm -skipTrash /path/to/file/you/want/to/remove/permanently
如果不加 -skipTrash
,删除的目录会放入/user/hdfs/.Trash中。有专门的配置项来指定什么时候清空回收站。
$ hdfs dfs -rm -skipTrash /tmp/roy/new.txt
Deleted /tmp/roy/new.txt
- 清空回收站
hdfs dfs -expunge
执行完命令后,回收站的数据不会立即被清理,而是先打了一个checkpoint。之后清除。
$ hdfs dfs -expunge
18/12/19 03:21:53 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://lab-eastasia-security-check-vm-hdp-01:8020/user/hdfs/.Trash
18/12/19 03:21:53 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://lab-eastasia-security-check-vm-hdp-01:8020/user/hdfs/.Trash
18/12/19 03:21:53 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://lab-eastasia-security-check-vm-hdp-01:8020/user/hdfs/.Trash
18/12/19 03:21:53 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/hdfs/.Trash/181219032153
- 查看HDFS状态
hdfs dfsadmin -report
- 磁盘修复
hdfs fsck /
[参考文档]
https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
网友评论