# HDFS Shell

通过命令行来进一步跟 HDFS 文件系统进行交互,可以执行所有常用的文件系统的操作,例如:读取文件、创建目录、移动文件、删除文件等等。同时可以通过 hdfs dfs -help 命令来获取每个命令的详细帮助文档。

# 常用的 HDFS Shell 命令

命令 功能
-help 显示命令的帮助信息
-ls (-R) [path] 显示当前目录下的所有文件
-du (-S) [path] 显示目录中所有的文件大小
-count (-q) [path] 显示文件中的文件数量
-mv [src] [dst] 移动多个文件到目标目录
-cp [src] [dst] 复制多个文件到目标目录
-rm (-R) [path] 删除文件(夹)
-put [localsrc] [dst] 本地文件上传到 hdfs 中
-copyFromLocal [localsrc] [dst] 以 put 相同
-moveFromLocal [localsrc] [dst] 本地文件剪切到 hdfs 中
-get [src] [localdst] 从 hdfs 中下载文件到本地
-getmerge [src] [localdst] 将源目录中的所有文件排序合并到一个文件中
-cat [src] 在 hdfs 中显示文件内容
-text [src] 在 hdfs 中显示文件内容
-copyToLocal [src] [localdst] 复制到本地
-moveToLocal [src] [localdst] 移动到本地
-mkdir (-p) [paths] 创建目录
-touchz [path] 创建一个空文件

# 以下是部分命令的具体使用方法

# 1. mkdir 创建目录

使用方法:hdfs dfs -mkdir (-p) [paths]

# 创建 user 目录
hdfs dfs -mkdir /user

# 同时创建多个目录
hdfs dfs -mkdir /user/d1 /user/d2

# 当创建多级目录时,使用 -p 自动创建上级目录
hdfs dfs -mkdir -p /user/hadoop/dir1 /user/hadoop/dir2

# 2. put 上传文件

使用方法:hdfs dfs -put <localsrc> ... <dst>

从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。

# 单个文件上传
hdfs dfs -put b.txt /user/hadoop/dir1

# 多个文件上传
hdfs dfs -put a.xml b.xml /user/hadoop/dir1

# 3. ls 列出文件

使用方法:hdfs dfs -ls (-R)

# 列出 hdfs 文件系统的根目录文件
hdfs dfs -ls /

# 列出 hdfs 文件系统所有的目录和文件
hdfs dfs -ls -R /

# 4. text、cat

使用方法:hdfs dfs -text[-cat]

将文本文件或某些格式的非文本文件通过文本格式输出

hdfs dfs -text /user/hadoop/dir1/a.xml
hdfs dfs -cat /user/hadoop/dir1/a.xml

# 5. get

使用方法:hdfs dfs -get [src] [localdist]

将 HDFS 中的文件被复制到本地

hdfs dfs -get /user/hadoop/dir1/a.xml ~/tmp/user/

# 6. rm (-R)

使用方法:hdfs dfs -rm (-R) [path]

每次可以删除多个文件或目录

# 删除指定的文件。只删除空目录或文件
[root@bigdata11 ~]# hdfs dfs -rm /user/hadoop/dir1/a.xml
Deleted /user/hadoop/dir1/a.xml

# 删除文件或目录
[root@bigdata11 ~]# hdfs dfs -rm -R /user/hadoop/dir1
Deleted /user/hadoop/dir1

# 7. chmod

使用方法:hdfs dfs -chmod (-R) [num,num,num] [path]

改变文件的权限。使用 -R 将改变在目录结构下递归进行。命令使用者必须是root用户下

[root@bigdata11 ~]# hdfs dfs -chmod 777 /user/hadoop/dir2

[root@bigdata11 ~]# hdfs dfs -ls /user/hadoop/
drwxrwxrwx   - root supergroup          0 2020-05-05 21:00 /user/hadoop/dir2

# 8. copyFromLocal

使用方法:hdfs dfs -copyFromLocal <localsrc> ... <dst>

与 put 相类似,也可以从从键盘 读取输入到 hdfs file 中。

# 9. copyToLocal

使用方法:hdfs dfs -copyToLocal [src] [localdist]

与 get 相类似,将 HDFS 中的文件被复制到本地。

# 10. cp

使用方法:hdfs dfs -cp <src> ... <dst>

将文件从 hdfs 中复制到目标路径,允许有多个源路径,此时目标路径必须是目录

[root@bigdata11 ~]# hdfs dfs -mkdir -p /user/hadoop/file1 /user/hadoop/file2
[root@bigdata11 ~]# hdfs dfs -put output/part-r-00000 /user/hadoop/file1
# 将part-r-00000复制到file2文件中
[root@bigdata11 ~]# hdfs dfs -cp /user/hadoop/file1/part-r-00000 /user/hadoop/file2

# 11. du

使用方法:hdfs dfs -du <path>

显示目录中的所有文件的大小

[root@bigdata11 ~]# hdfs dfs -du /user/hadoop/file1/
55  /user/hadoop/file1/part-r-00000
[root@bigdata11 ~]# hdfs dfs -du /user/hadoop/
0    /user/hadoop/dir2
580  /user/hadoop/dis1
55   /user/hadoop/file1
55   /user/hadoop/file2
[root@bigdata11 ~]#

# 12. expunge

使用方法:hdfs dfs -expunge

用来清空回收站,hdfs 回收站默认不开启

# 13. getmerge

使用方法:hdfs dfs -getmerge <src> <local>

将 hdfs 指定目录下所有文件排序后合并到 local 指定的文件中,文件不存在时会自动创建,文件存在时会覆盖里面的内容。

[root@bigdata11 ~]# cp input/wc.txt input/wc2.txt
[root@bigdata11 ~]# hdfs dfs -put input/* /user/hadoop/file2
[root@bigdata11 ~]# hdfs dfs -getmerge /user/hadoop/file2 input/newWC.txt

# 14. mv

使用方法:hdfs dfs -mv <src> ... <dist>

移动 HDFS 上的文件

hdfs dfs -mv /user/hadoop/file1 /user/hadoop/file2

# 15. tail

使用方法:hdfs dfs -tail [-f] <path>

将文件尾部 1KB 字节的内容输出到控制台中

# 16. touchz

使用方法:hdfs dfs -touchz <pathname>

创建一个空文件

# Hadoop 系统管理命令

Hadoop 除了操作文件系统外,还提供了系统的管理命令,包括开启服务、关闭服务、格式化、安全模式设置等命令:

# 查看 Hadoop 版本

[root@bigdata11 ~]# hadoop version

# 启动和停止 Hadoop 所有进程

[root@bigdata11 ~]# start-all.sh 

[root@bigdata11 ~]# stop-all.sh 

# 格式化一个新的分布式文件系统

[root@bigdata11 ~]# hadoop namenode -format 

# 启动和停止 NameNode

[root@bigdata11 ~]# start-dfs.sh 

[root@bigdata11 ~]# stop-dfs.sh 

# 启动和停止 Yarn

[root@bigdata11 ~]# start-yarn.sh 

[root@bigdata11 ~]# stop-yarn.sh 

# 平衡 hdfs 文件块分布

如果管理员发现某些 DataNode 保存数据过多,某些 DataNode 保存数据相对较少,可以使用上述命令手动启动内部的均衡过程。

[root@bigdata11 ~]# hadoop balancer

# Hadoop 安全模式

NameNode 在启动时会自动进入安全模式,安全模式时 NameNode 的一种状态,在这个阶段,文件系统不允许有任何修改。安全模式的目的在系统启动时检查各个 DataNode 上的数据块有效性,同时根据策略对数据块进行必要的复制或删除,当数据块副本满足最小副本数条件时,会自动退出安全模式。

注:当 HDFS 进入安全模式后,会导致 Hive 和 HBase 的启动异常 。

# 使用方式

Usage: hdfs dfsadmin [-safemode enter | leave | get | wait | forceExit]

# 查看 Hadoop 是否处于安全模式

[root@bigdata11 ~]# hdfs dfsadmin -safemode get
Safe mode is OFF

# 手动进入安全模式

[root@bigdata11 ~]# hdfs dfsadmin -safemode enter
Safe mode is ON

此时进入安全模式状态。

# 退出安全模式

[root@bigdata11 ~]# hdfs dfsadmin -safemode leave
Safe mode is OFF

此时已退出安全模式状态。

# 列出所有当前支持的命令

[root@bigdata11 ~]# hdfs dfsadmin -help

# 参考资料

Apache Hadoop 2.10.0 > HDFS Shell

上次更新: 2020-05-10 13:33:57