微信公众号:小康新鲜事儿


基本语法:​​hdfs dfs 具体命令​​​、​​hadoop fs 具体命令​​(过时)

1. 查看目录

# 显示目录结构
hdfs dfs -ls <path>
# 以人性化的方式递归显示目录结构
hdfs dfs -ls -R -h <path>
# 显示根目录下内容
hdfs dfs -ls /

2. 创建目录

# 创建目录
hdfs dfs -mkdir <path>
# 递归创建目录
hdfs dfs -mkdir -p <path>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -mkdir /xiaokang
[xiaokang@hadoop01 ~]$ hdfs dfs -mkdir -p /wordcount/input

3. 创建文件

#创建一个文件大小为0的文件
hdfs dfs -touchz <文件名>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -touchz /xiaokang/aaa.txt

4. 删除操作

# 删除文件
hdfs dfs -rm <path>
# 删除空文件夹
hdfs dfs -rmdir <path>
# 递归删除目录和文件
hdfs dfs -rm -R <path>

5. 拷贝操作

#该命令允许多个来源,但此时目标必须是一个目录
hdfs dfs -cp [-f] [-p] <src> <dst>
-f :当文件存在时,进行覆盖
-p :将权限、所属组、时间戳、ACL以及XATTR等也进行拷贝

#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -cp -f -p /xiaokang/bbb.txt /wordcount/input/bbb.txt

6. 移动操作(重命名)

#命令允许多个来源,但此时目的地需要是一个目录。跨文件系统移动文件是不允许的
hdfs dfs -mv <src> <dst>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -mv /xiaokang /xiaokang1 /wordcount
[xiaokang@hadoop01 ~]$ hdfs dfs -mv /wordcount/xiaokang /wordcount/xiaokang_mv

7. 从本地加载文件到HDFS

# 二选一执行即可
hdfs dfs -put <localsrc> <dst>
hdfs dfs -copyFromLocal <localsrc> <dst>
-f :当文件存在时,进行覆盖
-p :将权限、所属组、时间戳、ACL以及XATTR等也进行拷贝

#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -put -f -p ~/bbb.txt /xiaokang/bbb.txt

8. 从本地剪切文件到HDFS

hdfs dfs -moveFromLocal <localsrc> <dst>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -moveFromLocal ~/xiaokang.txt /wordcount/input

9. 从HDFS导出文件到本地

# 二选一执行即可
hadoop fs -get <src> <localdst>
hadoop fs -copyToLocal <src> <localdst>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -get /wordcount/input/xiaokang.txt ./

10. 从HDFS剪切文件到本地(还没实现呢)

[xiaokang@hadoop01 ~]$ hdfs dfs -moveToLocal /wordcount/input/xiaokang.txt ./
moveToLocal: Option '-moveToLocal' is not implemented yet.

11. 追加一个或多个文件到已经存在的文件的末尾

hdfs dfs -appendToFile <localsrc> ... <dst>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -appendToFile ./test_1.txt /wordcount/input/aaa.txt
[xiaokang@hadoop01 ~]$ hdfs dfs -appendToFile ./test_1.txt ./test_2.txt /wordcount/input/aaa.txt

12. 查看文件内容

# 二选一执行即可
hdfs dfs -cat <path>
#将HDFS中文件以文本形式输出(包括zip包,jar包等形式)
hdfs dfs -text <path>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -cat /wordcount/input/aaa.txt
[xiaokang@hadoop01 ~]$ hdfs dfs -text /wordcount/input/aaa.txt

13. 显示文件的最后一千字节 (1kb)

hdfs dfs -tail <path> 
#和Unix中tail -f命令类似,当文件内容更新时,输出将会改变,具有实时性
hdfs dfs -tail -f <path>
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -tail /wordcount/input/wordcount_input.txt
[xiaokang@hadoop01 root]$ hdfs dfs -tail -f /wordcount/input/wordcount_input.txt
[xiaokang@hadoop01 ~]$ hdfs dfs -appendToFile ~/test_1.txt /wordcount/input/wordcount_input.txt

14. 统计目录下各文件大小

hdfs dfs -du [-s] [-h] URI [URI ...]
-s : 显示所有文件大小总和
-h : 将以更友好的方式显示文件大小(例如 64.0m 而不是 67108864)
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -du /wordcount
55524 /wordcount/input
0 /wordcount/xiaokang1
37 /wordcount/xiaokang_mv
[xiaokang@hadoop01 ~]$ hdfs dfs -du -h /wordcount
54.2 K /wordcount/input
0 /wordcount/xiaokang1
37 /wordcount/xiaokang_mv
[xiaokang@hadoop01 ~]$ hdfs dfs -du -h -s /wordcount
54.3 K /wordcount

15. 合并下载多个文件

hdfs dfs -getmerge [-nl] <src> <localdst>
# 案例 将HDFS上的wordcount_input.txt和aaa.txt合并后下载到本地的当前用户家目录的merge.txt
[xiaokang@hadoop01 ~]$ hdfs dfs -getmerge /wordcount/input/wordcount_input.txt /wordcount/input/aaa.txt ~/merge.txt
-nl 在每个文件的末尾添加换行符(LineFeed)
-skip-empty-file 跳过空文件

16. 统计文件系统的可用空间

hdfs dfs -df -h /
-h : 将以更友好的方式显示文件大小(例如 64.0m 而不是 67108864)

17. 改变文件复制因子

#更改文件的复制因子。如果 path 是目录,则更改其下所有文件的复制因子
hdfs dfs -setrep [-w] <numReplicas> <path>
-w : 标志的请求,命令等待复制完成。这有可能需要很长的时间。
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -setrep 3 /wordcount/input/bbb.txt
[xiaokang@hadoop01 ~]$ hdfs dfs -setrep -w 5 /wordcount/input/bbb.txt

18. 权限控制

# 权限控制和Linux上使用方式一致
# 变更文件或目录的所属群组。 用户必须是文件的所有者或超级用户。
hdfs dfs -chgrp [-R] GROUP URI [URI ...]
# 修改文件或目录的访问权限 用户必须是文件的所有者或超级用户。
hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
# 修改文件的拥有者 用户必须是超级用户。
hdfs dfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -chmod -R 774 /tmp
[xiaokang@hadoop01 ~]$ hdfs dfs -chown -R xiaokang:hadoopenv /tmp
[xiaokang@hadoop01 ~]$ hdfs dfs -chgrp -R test /tmp

19. 文件检测

hdfs dfs -test -[defsz] URI
-d:如果路径是目录,返回 0
-e:如果路径存在,则返回 0
-f:如果路径是文件,则返回 0
-s:如果路径不为空,则返回 0
-r:如果路径存在且授予读权限,则返回 0
-w:如果路径存在且授予写入权限,则返回 0
-z:如果文件长度为零,则返回 0
#案例
[xiaokang@hadoop01 ~]$ hdfs dfs -test -d /wordcount/xiaokang_mv && echo "true"

20. 管理HDFS集群(dfsadmin)

#返回集群状态信息
hdfs dfsadmin -report
#查看、进入和离开安全模式
hdfs dfsadmin -safemode get/enter/leave
#提前进入安全模式,将内存中的fsimage保存为一个fsimage文件,重置edits文件(前提要打开安全模式)
hdfs dfsadmin -saveNamespace
#保存datanode和块信息,存储到logs下
hdfs dfsadmin -metasave 名称.tt
#重新读取hosts和exclude文件,刷新集群节点
hdfs dfsadmin -refreshNodes
#设置文件目录配额
hdfs dfsadmin -setQuota 10 /wordcount/input

21. 其它命令(以下操作用​​hdfs​​用户)

#检查HDFS上文件和目录的健康状态、获取文件的block信息和位置信息
hdfs fsck hdfs路径
#检查并列出所有文件状态
hdfs fsck /wordcount/input/ -files
#打印文件的block列表报告
hdfs fsck /wordcount/input/aaa.txt -files -blocks
#打印文件块的位置信息
hdfs fsck /wordcount/input/aaa.txt -files -blocks -locations
#打印文件块所在的机架信息
hdfs fsck /wordcount/input/aaa.txt -files -blocks -locations -racks
#案例
[xiaokang@hadoop01 logs]$ hdfs fsck /wordcount/input/aaa.txt -files -blocks -locations -racks
Connecting to namenode via http://hadoop01:50070/fsck?ugi=xiaokang&files=1&blocks=1&locations=1&racks=1&path=%2Fwordcount%2Finput%2Faaa.txt
FSCK started by xiaokang (auth:SIMPLE) from /192.168.239.124 for path /wordcount/input/aaa.txt at Wed Feb 12 15:28:42 CST 2020
/wordcount/input/aaa.txt 348 bytes, 1 block(s): OK
0. BP-1004851153-192.168.239.124-1581483619988:blk_1073741828_1005 len=348 repl=1 [/default-rack/192.168.239.124:50010]

Status: HEALTHY
Total size: 348 B
Total dirs: 0
Total files: 1
Total symlinks: 0
Total blocks (validated): 1 (avg. block size 348 B)
Minimally replicated blocks: 1 (100.0 %)
Over-replicated blocks: 0 (0.0 %)
Under-replicated blocks: 0 (0.0 %)
Mis-replicated blocks: 0 (0.0 %)
Default replication factor: 1
Average block replication: 1.0
Corrupt blocks: 0
Missing replicas: 0 (0.0 %)
Number of data-nodes: 1
Number of racks: 1
FSCK ended at Wed Feb 12 15:28:42 CST 2020 in 3 milliseconds


The filesystem under path '/wordcount/input/aaa.txt' is HEALTHY

文件块位置:​​/opt/software/hadoop-2.7.7/dfs/datanode_data/current/BP-1004851153-192.168.239.124-1581483619988/current/finalized/subdir0/subdir0/​

安全模式:集群启动时,自动进入安全模式,此时集群文件为只读状态;datanode死掉的数量达到了集群能接受的上限值;自动进入安全模式;datanode可用空间达到了集群能接受的上限值;自动进入安全模式