HDFS Shell 命令简介
HDFS Shell 是一个与 Hadoop 分布式文件系统交互的命令行工具,它通过 hdfs dfs 命令(或简写为 hdfs dfs -)来执行各种文件和目录操作,如上传、下载、查看、删除等,这些命令的语法和功能与 Linux/Unix 的 Shell 命令(如 ls, mkdir, rm)非常相似,便于学习和使用。

基本语法格式:
hdfs dfs -<command> <args>
hdfs dfs -ls / hdfs dfs -mkdir /data
基础文件和目录操作
这些是最常用、最核心的命令。
ls - 列出目录内容
显示指定路径下的文件和目录列表。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -ls <path> |
列出路径下的文件和目录信息(权限、用户、大小、日期、名称)。 | hdfs dfs -ls / |
hdfs dfs -ls -R <path> |
递归地列出路径下所有子目录和文件。 | hdfs dfs -ls -R /user |
hdfs dfs -ls -d <path> |
只列出路径本身的信息,不列出其内容。 | hdfs dfs -ls -d /user |
mkdir - 创建目录
创建新的目录。-p 选项可以创建多级目录。

| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -mkdir <path> |
创建一个目录,如果父目录不存在,会报错。 | hdfs dfs -mkdir /data |
hdfs dfs -mkdir -p <path> |
创建一个目录,如果父目录不存在则一并创建。 | hdfs dfs -mkdir -p /data/logs/2025 |
rm - 删除文件或目录
删除指定的文件或目录。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -rm <path> |
删除一个文件或一个空目录。 | hdfs dfs -rm /data/file.txt |
hdfs dfs -rmdir <path> |
只能删除一个空目录。 | hdfs dfs -rmdir /data/empty_dir |
hdfs dfs -rm -r <path> |
递归删除,删除指定路径下的所有文件和子目录。慎用! | hdfs dfs -rm -r /data/logs |
cp - 复制文件或目录
从源路径复制到目标路径。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -cp <src> <dest> |
复制文件或目录。 | hdfs dfs -cp /data/file1.txt /backup/ |
hdfs dfs -cp -r <src> <dest> |
递归复制整个目录。 | hdfs dfs -cp -r /data/logs /backup/ |
mv - 移动/重命名文件或目录
将文件或目录从源路径移动到目标路径,在 HDFS 中,mv 操作是“重命名”操作,非常快,因为它只改变元数据,不移动数据。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -mv <src> <dest> |
移动或重命名文件/目录。 | hdfs dfs -mv /data/file1.txt /data/processed_file1.txt |
hdfs dfs -mv /data/logs /backup/ |
将 logs 目录移动到 backup 目录下。 |
get 和 put - 本地与 HDFS 之间传输数据
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -put <localsrc> <hdfsdest> |
将本地文件或目录上传到 HDFS。 | hdfs dfs -put local_file.txt /data/ |
hdfs dfs -get <hdfssrc> <localdest> |
将 HDFS 文件或目录下载到本地。 | hdfs dfs -get /data/file.txt ./local_copy.txt |
hdfs dfs -copyFromLocal <localsrc> <hdfsdest> |
功能与 put 相同,但更明确地表示从本地复制。 |
hdfs dfs -copyFromLocal local_file.txt /data/ |
hdfs dfs -copyToLocal <hdfssrc> <localdest> |
功能与 get 相同,但更明确地表示复制到本地。 |
hdfs dfs -copyToLocal /data/file.txt ./ |
查看文件内容
cat - 显示文件全部内容
将文件的全部内容输出到标准输出,适用于小文件。

| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -cat <path> |
显示 HDFS 文件的全部内容。 | hdfs dfs -cat /data/file.txt |
head - 显示文件开头部分
显示文件的前 N 行(默认 10 行)。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -head <path> |
显示文件的前 10 行。 | hdfs dfs -head /data/large_file.log |
hdfs dfs -head -n 100 <path> |
显示文件的前 100 行。 | hdfs dfs -head -n 100 /data/large_file.log |
tail - 显示文件结尾部分
显示文件的最后 N 行(默认 10 行)。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -tail <path> |
显示文件的最后 10 行。 | hdfs dfs -tail /data/application.log |
hdfs dfs -tail -f <path> |
实时跟踪文件的末尾内容,类似于 Linux 的 tail -f,非常 useful for logs. |
hdfs dfs -tail -f /data/flink/task.log |
高级与管理命令
du - 查看磁盘使用情况
计算文件或目录所占用的空间。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -du <path> |
显示目录或文件的大小(以字节为单位)。 | hdfs dfs -du /data |
hdfs dfs -du -s <path> |
汇总显示目录的总大小,不显示子目录详情。 | hdfs dfs -du -s /data |
hdfs dfs -du -h <path> |
以人类可读的格式(如 KB, MB, GB)显示大小。 | hdfs dfs -du -h /data |
hdfs dfs -du -sh <path> |
汇总并以人类可读的格式显示目录总大小。最常用! | hdfs dfs -du -sh /data |
count - 统计文件和目录数量
递归地统计指定路径下的文件数量、目录大小和总大小。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -count <path> |
DIR_COUNT FILE_COUNT CONTENT_SIZE PATH_NAME |
hdfs dfs -count /data |
hdfs dfs -count -h <path> |
以人类可读格式显示大小。 | hdfs dfs -count -h /data |
chmod / chown - 修改权限和所有者
修改文件或目录的权限和所有者。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -chmod <mode> <path> |
修改权限。mode 可以是数字(如 755)或符号(如 u+x)。 |
hdfs dfs -chmod 755 /data |
hdfs dfs -chown [-R] <owner>[:<group>] <path> |
修改所有者和所属组。-R 表示递归修改。 |
hdfs dfs -chown hadoop:hadoop /data |
hdfs dfs -chgrp [-R] <group> <path> |
修改所属组。 | hdfs dfs -chgrp hadoop /data |
setrep - 设置副本数
修改文件的副本数量。注意:此命令只是将新的副本数记录在元数据中,HDFS 会在后台自动调整数据块以达到新的副本数,不会立即完成。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -setrep [-R] <rep> <path> |
设置文件或目录的副本数。-R 表示递归设置目录下所有文件的副本数。 |
hdfs dfs -setrep 3 /data/large_file.csv |
hdfs dfs -setrep -w <rep> <path> |
设置副本数并等待操作完成。 | hdfs dfs -setrep -w 3 /data/large_file.csv |
expunge - 清空回收站
HDFS 的删除操作会将文件移动到一个名为 .Trash 的回收站目录,而不是立即物理删除。expunge 会清空回收站,永久删除其中的文件。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs dfs -expunge |
清空 HDFS 回收站。 | hdfs dfs -expunge |
HDFS 核心概念与 Shell 结合
HDFS 文件系统结构
HDFS 有一个根目录 ,所有文件和目录都存储在根目录下。
- 用户目录: 通常每个用户都有一个
/user/<username>的个人目录。 - 临时目录:
/tmp用于存储临时文件。 - 系统目录:
/hdfs等是系统保留目录。
URI 路径
HDFS Shell 命令可以操作本地文件系统,也可以操作 HDFS,默认情况下,hdfs dfs 命令操作的是 HDFS。
- HDFS 路径: 必须以
hdfs://开头,或者直接以 开头(默认为 HDFS)。hdfs dfs -ls /user/hadoop # 操作 HDFS hdfs dfs -ls hdfs://namenode:8020/user/hadoop # 显式操作 HDFS
- 本地文件系统路径: 使用
file://前缀,或者直接使用本地路径(某些命令支持)。hdfs dfs -ls file:///home/hadoop # 操作本地文件系统
文件块 (Block)
HDFS 中的大文件被切分成固定大小的块(默认 128MB 或 256MB)。hdfs fsck 命令可以检查文件块的完整性。
| 命令 | 描述 | 示例 |
|---|---|---|
hdfs fsck <path> [-files [-blocks [-locations]]] |
检查 HDFS 文件系统的健康状况,查看文件块的位置信息。 | hdfs fsck /data -files -blocks -locations |
综合示例
假设我们有一个本地目录 ~/my_project,需要将其内容上传到 HDFS 的 /projects/my_project 目录下,并进行一些管理操作。
# 1. 创建本地项目目录和文件 mkdir -p ~/my_project/data echo "Hello HDFS" > ~/my_project/data/file1.txt echo "This is a test log line" > ~/my_project/data/app.log # 2. 在 HDFS 上创建对应的目标目录 hdfs dfs -mkdir -p /projects/my_project # 3. 上传整个本地目录到 HDFS hdfs dfs -put ~/my_project /projects/ # 4. 验证上传结果 hdfs dfs -ls -R /projects/my_project # 输出可能类似于: # /projects/my_project # /projects/my_project/my_project # /projects/my_project/my_project/data # -rw-r--r-- 1 hadoop supergroup 13 2025-10-27 10:00 /projects/my_project/my_project/data/app.log # -rw-r--r-- 1 hadoop supergroup 12 2025-10-27 10:00 /projects/my_project/my_project/data/file1.txt # 5. 查看文件内容 hdfs dfs -cat /projects/my_project/my_project/data/file1.txt # 6. 统计 HDFS 目录大小 hdfs dfs -du -sh /projects/my_project/my_project # 7. 修改文件所有者 hdfs dfs -chown hadoop:dev /projects/my_project/my_project/data # 8. 将 app.log 的副本数设置为 3 hdfs dfs -setrep 3 /projects/my_project/my_project/data/app.log # 9. 查看日志文件的最后几行 hdfs dfs -tail /projects/my_project/my_project/data/app.log # 10. (可选) 清理:删除上传的 HDFS 目录 # hdfs dfs -rm -r /projects/my_project
总结表格
| 功能 | 主要命令 | 备注 |
|---|---|---|
| 查看 | ls, cat, head, tail |
ls -R 递归,tail -f 实时跟踪 |
| 创建 | mkdir |
mkdir -p 创建多级目录 |
| 删除 | rm, rmdir |
rm -r 递归删除,-R 大写是 count 命令 |
| 复制 | cp |
cp -r 递归复制 |
| 移动/重命名 | mv |
HDFS 中的移动是元数据操作,非常快 |
| 上传/下载 | put / get, copyFromLocal / copyToLocal |
put 和 copyFromLocal 功能相同 |
| 磁盘统计 | du, count |
du -sh 是最常用的查看目录大小组合 |
| 权限管理 | chmod, chown, chgrp |
-R 递归修改 |
| 副本管理 | setrep |
修改副本数,后台异步执行 |
| 回收站 | expunge |
清空回收站,永久删除 |
掌握这些命令,你就可以高效地管理 HDFS 上的数据了。
