HDFS分布式文件系统
启动
start-dfs.shHDFS常用的40个命令
cmd为具体要执行的命令
Hadoop fs -cmd <args>不添加任务具体的执行命令,Hadoop 就会列出命令行接口的帮助信息
[root@node01 ~]# hadoop fs Usage: hadoop fs [generic options] [-appendToFile <localsrc> ... <dst>] [-cat [-ignoreCrc] <src> ...] [-checksum <src> ...] [-chgrp [-R] GROUP PATH...] [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...] [-chown [-R] [OWNER][:[GROUP]] PATH...] [-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>] [-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-count [-q] [-h] [-v] [-x] <path> ...] [-cp [-f] [-p | -p[topax]] <src> ... <dst>] [-createSnapshot <snapshotDir> [<snapshotName>]] [-deleteSnapshot <snapshotDir> <snapshotName>] [-df [-h] [<path> ...]] [-du [-s] [-h] [-x] <path> ...] [-expunge] [-find <path> ... <expression> ...] [-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>] [-getfacl [-R] <path>] [-getfattr [-R] {-n name | -d} [-e en] <path>] [-getmerge [-nl] <src> <localdst>] [-help [cmd ...]] [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...]] [-mkdir [-p] <path> ...] [-moveFromLocal <localsrc> ... <dst>] [-moveToLocal <src> <localdst>] [-mv <src> ... <dst>] [-put [-f] [-p] [-l] <localsrc> ... <dst>] [-renameSnapshot <snapshotDir> <oldName> <newName>] [-rm [-f] [-r|-R] [-skipTrash] <src> ...] [-rmdir [--ignore-fail-on-non-empty] <dir> ...] [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]] [-setfattr {-n name [-v value] | -x name} <path>] [-setrep [-R] [-w] <rep> <path> ...] [-stat [format] <path> ...] [-tail [-f] <file>] [-test -[defsz] <path>] [-text [-ignoreCrc] <src> ...] [-touchz <path> ...] [-usage [cmd ...]] Generic options supported are -conf <configuration file> specify an application configuration file -D <property=value> use value for given property -fs <local|namenode:port> specify a namenode -jt <local|resourcemanager:port> specify a ResourceManager -files <comma separated list of files> specify comma separated files to be copied to the map reduce cluster -libjars <comma separated list of jars> specify comma separated jar files to include in the classpath. -archives <comma separated list of archives> specify comma separated archives to be unarchived on the compute machines. The general command line syntax is bin/hadoop command [genericOptions] [commandOptions]1、文件准备
在服务器本地创建 data.txt 文件用于测试
vim data.txt hello hadoop2、-appendToFile
将服务器本地的文件追加到HDFS指定的文件中,如果多次运行相同的参数,则会在 HDFS 的文件中追加多行相同的内容。
hadoop fs -appendToFile data.txt /data/data.txt3、-cat
主要用来查看 HDFS 中的非压缩文件的内容
[root@node01 ~]# hadoop fs -cat /data/data.txt hello hadoop hello hadoop4、-checksum
查看 HDFS 中文件的校验和
[root@node01 ~]# hadoop fs -checksum /data/data.txt /data/data.txt MD5-of-0MD5-of-512CRC32C 000002000000000000000000c8e21d30c9ed5817cd5ff40768a343895、-chgrp
改变 所属组
执行此命令的用户必须是文件或目录的所有者或超级用户
hadoop fs -chgrp hadoop /data/data.txt6、-chmod
修改 访问权限,执行此命令的用户必须是文件或目录的所有者或超级用户
hadoop fs -chmod 700 /data/data.txt此时,data.txt 文件当前的访问权限已经被修改为“ -rwx------”
7、chown
修改所有者,此命令的用户必须是超级用户
hadoop fs -chown alice:alice /data/data.txt8、-copyFromLocal
将本地服务器上的文件复制到HDFS中
hadoop fs -copyFromLocal a.txt /data/9、-copyToLocal
将 HDFS 中的文件复制到服务器本地
hadoop fs -copyToLocal /data/data.txt /home/hadoop/input10、-count
显示目录下的子目录数、文件数、占用字节数、所有文件和目录名,-q 选项显示目录和空间的配额信息
[root@node01 zwj]# hadoop fs -count /data/ 4 9 456 /data11、-cp
复制文件或目录,如果源文件或目录有多个,则目标必须为目录
hadoop fs -cp /data/data.txt /data/data.tmp12、-createSnapshot
为HDFS中的文件创建快照,实例代码如下: 首先在 HDFS 中创建目录 /sn,并将 /sn 目录设置为可快照,如下所示:
[root@node01 zwj]# hadoop fs -mkdir /sn [root@node01 zwj]# hdfs dfsadmin -allowSnapshot /sn Allowing snaphot on /sn succeeded接下来执行创建快照操作,如下所示:
[root@node01 zwj]# hadoop fs -createSnapshot /sn s1 Created snapshot /sn/.snapshot/s1返回如图所示说明创建快照成功。
13、-deleteSnapshot
删除 HDFS 中的文件快照
hadoop fs -deleteSnapshot /sn sn1删除 /sn 目录的快照sn1
14、-df
查看 HDFS 中目录空间的使用情况
[root@node01 zwj]# hadoop fs -df -h /data Filesystem Size Used Available Use% hdfs://node01:8020 130.1 G 13.7 G 57.8 G 11%15、-du
查看 HDFS 或目录中的文件大小
[root@node01 zwj]# hadoop fs -du -h -s -x /data 456 1.3 K /data16、-expunge
清空HDFS中的回收站释
[root@node01 zwj]# hadoop fs -expunge 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://node01:8020/user/root/.Trash 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://node01:8020/user/root/.Trash 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: Deleted trash checkpoint: /user/root/.Trash/201028063715 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: Deleted trash checkpoint: /user/root/.Trash/201031181139 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://node01:8020/user/root/.Trash 20/12/27 20:41:48 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/20122720414817、-find
查找 HDFS 中指定目录下的文件
[root@node01 zwj]# hadoop fs -find /data /data/data.txt /data /data/a.txt /data/data.txt18、-get
将 HDFS 中的文件复制到本地服务器解释
hadoop fs -get /data/data.txt /home/hadoop/input19、-getfacl
查看HDFS中指定目录下的文件的访问控制列表,-R 选项可以查看所有子目录下的文件访问控制列表释
[root@node01 zwj]# hadoop fs -getfacl /data # file: /data # owner: root # group: supergroup20、-getfattr
查看 HDFS 上的文件扩展属性信息,-R 选项可以查看当前目录下所有子目录中的文件扩展属性信息或子目录下文件的扩展属性信息
[root@node01 zwj]# hadoop fs -getfattr -R -d /data # file: /data # file: /data/a.txt # file: /data/data.txt # file: /data/input21、-getmerge
将 HDFS 中的多个文件合并为一个文件,复制到本地服务器
hadoop fs -getmerge /data/a.txt /data/b.txt /home/hadoop/input/data.local22、-head
以head方式查看 HDFS 中的文件,此命令后面的文件只能为文件,不能为目录,实例代码如下所示:
[root@node01 zwj]# hadoop fs -head /data/data.txt hello hadoop hello hadoop23、-help
查看 Hadoop 具体命令的帮助信息
[root@node01 zwj]# hadoop fs -help cat -cat [-ignoreCrc] <src> ... : Fetch all files that match the file pattern <src> and display their content on stdout.24、-ls
列出 HDFS 中指定目录下的信息
[root@node01 zwj]# hadoop fs -ls /data Found 3 items -rw-r--r-- 3 root supergroup 6 2020-12-27 20:11 /data/a.txt -rw-r--r-- 3 root supergroup 26 2020-12-27 18:59 /data/data.txt drwxr-xr-x - root supergroup 0 2020-09-18 19:16 /data/input25、-mkdir
在 HDFS 上创建目录
hadoop fs -mkdir /test/data26、-moveFromLocal
移动本地服务器上的某个文件到 HDFS 中
hadoop fs -moveFromLocal /home/hadoop/input/data.local /data/27、-moveToLocal
移动 HDFS 中的文件到本地服务器的某个目录下。
hadoop fs -moveToLocal /data/data.txt /home/hadoop/input/28、-mv
移动 HDFS 中的目录到 HDFS 中的另一个目录下
hadoop fs -mv /data/data.local /test29、-put
复制本地文件到 HDFS 中的某个目录下
hadoop fs -put /home/hadoop/input/data.local /data30、-renameSnapshot
重命名 HDFS 上的文件快照。
实例代码如下: 首先在 HDFS 中创建目录 /sn,并将 /sn 目录设置为可快照,如下所示:
[root@node01 zwj]# hadoop fs -mkdir /sn [root@node01 zwj]# hdfs dfsadmin -allowSnapshot /sn Allowing snaphot on /sn succeeded接下来执行创建快照操作,如下所示:
[root@node01 zwj]# hadoop fs -createSnapshot /sn s1 Created snapshot /sn/.snapshot/s1说明创建快照成功。 接下来将 /sn 目录的快照名称 sn1 重命名为 sn2,如下所示:
hadoop fs -renameSnapshot /sn sn1 sn231、-rm
删除文件或目录。实例代码如下所示:
hadoop fs -rm /data/data.local32、-rmkdir
删除HDFS上的目录,此目录必须是空目录
hadoop fs -rmdir /test33、-setrep
设置 HDFS 上的文件的目标副本数量
hadoop fs -setrep 5 /data/data.txt34、-stat
查看 HDFS 上文件或目录的统计信息,以 format 的格式列出。可选的 format 格式如下:
- %b:文件所占的块数
- %g:文件所属的用户组
- %n:文件名
- %o:文件块大小
- %r:备份数
- %u:文件所属用户
- %y:文件修改时间
实例代码如下所示:
[root@node01 zwj]$ hadoop fs -stat %b,%g,%n,%o,%r,%u,%y /data 0,hive,data,0,0,hive,2020-11-16 07:54:0435、-tail
显示一个文件的末尾数据,通常是显示文件最后的 1KB 的数据。
[root@node01 zwj]# hadoop fs -tail /data/data.txt hello hadoop hello hadoop36、-test
检测文件的信息,参数选项如下:
- -d:如果路径为目录则返回0
- -e:如果路径存在则返回0
- -f:如果路径为文件则返回0
- -s:如果路径中的文件大于0字节则返回0
- -w:如果路径存在并且具有写权限则返回0
- -r:如果路径存在并且具有读权限则返回0
- -z:如果路径中的文件为0字节则返回0,否则返回1
实例代码如下所示:
hadoop fs -test -d /data37、-text
查看文件内容。text 命令除了能够查看非压缩的文本文件内容之外,也能查看压缩后的文本文件内容;cat命令只能查看非压缩的文本文件内容。实例代码如下所示:
[root@node01 zwj]# hadoop fs -text /data/data.txt hello hadoop hello hadoop38、touch
在 HDFS 上创建文件,如果文件不存在则不报错:
hadoop fs -touch /data/data.touch39、-truncate
切断 HDFS 上的文件:
[root@node01 zwj]# hadoop fs -truncate 26 /data/data.txt Truncate /data/data.txt to length: 2640、-usage
列出指定命令的使用格式
[[root@node01 zwj]# hadoop fs -usage cat Usage: hadoop fs [generic options] -cat [-ignoreCrc] <src> ...HDFS 文件的读写流程
一、HDFS 写入流程
1、创建存放文件目录
mkdir /root/目录 cd /root/目录 vim 文件2、客户端向NameNode请求上传文件
3、NameNode响应可以上传
4、文件创建完成后,客户端准备切割第一个数据块,向 NameNode申请该 Block 的副本存放节点列表
5、NameNode返回DN1,DN2,DN3节点,DN1→DN2→DN3,表示采用这三个节点存储数据
6、客户端请求建立Block传输通道,DN1,DN2,DN3应答成功
7、客户端将数据封装为 Packet 数据包,向DN1传输数据Packet,N1 落地本地磁盘,同时转发 Packet 给 DN2;DN2 落地后继续转发给 DN3
8、DN3 写完 Packet 后,反向逐级发送 ACK 确认包:DN3→DN2→DN1→客户端
9、客户端收到 ACK 后发送下一个 Packet,单个 Block 读取完成,循环传输所有数据块
10、全部数据块传输完成,客户端调用close()关闭输出流,通知 NameNode 文件上传完毕;NameNode 修改元数据,将文件状态标记为已完成,整个 HDFS 写入流程结束
二、HDFS 文件读取流程
1、客户端向 NameNode 发起读取文件请求
2、NameNode 校验权限与文件存在性,返回该文件所有 Block 及对应 DN 节点列表(就近排序)
3、客户端选取第一个 Block,连接距离最近的 DataNode
4、客户端从 DN 读取 Block 数据,同时校验数据完整性
5、若数据损坏,自动切换该 Block 其他副本 DN 重新读取
6、单个 Block 读取完成,继续循环读取后续所有 Block
7、全部数据读取完毕,客户端关闭连接,读取流程结束