HDFS是一个分布式文件系统,我们可以使用一些命令来操作HDFS集群上的文件。
例如: 文件上传、下载、移动、拷贝等操作。
HDFS的Shell操作主命令都是 hdfs dfs,其他的操作直接向后拼接即可。
1 创建目录
1 2 3 4 5 6
| [-mkdir [-p] <path> ...]
调用格式: hdfs dfs -mkdir (-p) /目录 例如: - hdfs dfs -mkdir /data - hdfs dfs -mkdir -p /data/a/b/c
|
2 上传命令
1 2 3 4 5 6 7 8 9 10 11
| [-put [-f] [-p] [-l] <localsrc> ... <dst>]
调用格式: hdfs dfs -put /本地文件 /分布式文件系统路径 注意: 直接写/是省略了文件系统的名称hdfs://ip:port 例如: - hdfs dfs -put /root/a.txt /data/ - hdfs dfs -put /root/logs/* /data/
其他指令: [-moveFromLocal <localsrc> ... <dst>] [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>]
|
3 查看命令
1 2 3 4 5 6 7 8
| [-ls [-d] [-h] [-R] [<path> ...]] 调用格式: hdfs dfs -ls /
[-cat [-ignoreCrc] <src> ...] 调用格式: hdfs dfs -cat /xxx.txt
[-tail [-f] <file>] 调用格式: hdfs dfs -tail /xxx.txt
|
4 下载命令
1 2 3 4 5
| 注意:本地路径的文件夹可以不存在
调用格式:同copyToLocal
|
5 合并下载
1 2 3 4
| hdfs dfs [generic options] -getmerge [-nl] <src> <localdst>
调用格式: hdfs dfs -getmerge hdfs上面的路径 本地的路径 实例: hdfs dfs -getmerge /hadoopdata/*.xml /root/test.test
|
6 删除命令
1 2 3 4 5
| 注意:如果删除文件夹需要加-r
注意:必须是空文件夹,如果非空必须使用rm删除
|
7 拷贝命令
1 2 3 4
| hdfs dfs [generic options] -cp [-f] [-p | -p[topax]] <src> ... <dst>
调用格式: hdfs dfs -cp /hdfs路径_1 /hdfs路径_2 实例: hdfs dfs -cp /input /input2
|
8 移动命令
1 2 3 4
| hdfs dfds [generic options] -mv <src> ... <dst>
调用格式: hdfs dfs -mv /hdfs的路径1 /hdfs的另一个路径2 实例: hfds dfs -mv /aaa /bbb
|
9 创建空文件
1 2
| hdfs dfs [generic options] -touchz <path> ... 调用格式: hdfs dfs touchz /hadooptest.txt
|
10 向文件中追加内容
HDFS的文件系统上的文件,不允许进行文件中的数据插入、删除、修改操作,只支持向文件的末尾追加内容
例如: 删除文件的第10行数据,在第11行插入数据,修改第12行数据等,这些都是不允许的。
1 2 3 4
| [-appendToFile <localsrc> ... <dst>]
调用格式: hdfs dfs -appendToFile 本地文件 hdfs上的文件 注意: 不支持在中间随意增删改操作
|
11 修改文件权限
1 2 3 4 5 6 7
| 跟本地的操作一致, -R是让子目录或文件也进行相应的修改
实例: hdfs dfs -chmod 777 /input
|
12 修改文件副本数量
1 2 3 4
| [-setrep [-R] [-w] <rep> <path> ...]
调用格式:hdfs dfs -setrep 3 / 将hdfs根目录及子目录下的内容设置成3个副本 注意:当设置的副本数量与初始化时默认的副本数量不一致时,集群会作出反应,比原来多了会自动进行复制.
|
13 文件测试
1 2 3 4 5 6
| hdfs dfs [generic options] -test -[defsz] <path>
参数说明: -e:文件是否存在 存在返回0 -z:文件是否为空 为空返回0 -d:是否是路径(目录) ,是返回0 调用格式: hdfs dfs -test -d 文件 实例: hdfs dfs -test -d /shelldata/111.txt && echo "OK" || echo "no" 解释: 测试当前的内容是否是文件夹 ,如果是返回ok,如果不是返回no
|
14 查看文件夹及子文件夹数量
1 2
| hdfs dfs [generic options] -count [-q] [-h] <path> ... 调用格式: hdfs dfs -count /hadoop
|
15 查看磁盘利用率及文件大小
1 2
| 查看分布式系统的磁盘使用情况 #查看分布式系统上当前路径下文件的情况 -h:human 以人类可读的方式显示
|
16 查看文件状态
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| hdfs dfs [generic options] -stat [format] <path> ...
命令的作用:当向hdfs上写文件时,可以通过dfs.blocksize配置项来设置文件的block的大小。这就导致了hdfs上的不同的文件block的大小是不相同的。有时候想知道hdfs上某个文件的block大小,可以预先估算一下计算的task的个数。stat的意义:可以查看文件的一些属性。 调用格式:hdfs dfs -stat [format] 文件路径 format的形式: %b:打印文件的大小(目录大小为0) %n:打印文件名 %o:打印block的size %r:打印副本数 %y:utc时间 yyyy-MM-dd HH:mm:ss %Y:打印自1970年1月1日以来的utc的微秒数 %F:目录打印directory,文件打印regular file
注意: 1)当使用-stat命令但不指定format时,只打印创建时间,相当于%y 2)-stat 后面只跟目录,%r,%o等打印的都是0,只有文件才有副本和大小
实例: hdfs dfs -stat %b-%n-%o-%r /input/file1
|
17 回收站
修改core-site.xml文件
1 2 3 4 5 6 7 8 9 10 11
| <property> <name>fs.trash.interval</name> <value>1440</value> </property>
<property> <name>fs.trash.checkpoint.interval</name> <value>0</value> </property>
|
基本操作
1 2 3 4 5 6 7 8 9 10 11
| # 删除文件目录,删除之后会将文件移动到回收站 hdfs dfs -rm -r /test
# 清空回收站的数据 hdfs dfs -expunge
# 直接删除文件目录,不进入回收站 hdfs dfs -rm -r -skipTrash /test2
# 找回文件 hdfs dfs -mv /user/root/.Trash/Current/test /test
|