菜鸟科技网

HDFS Shell命令有哪些常用操作及用法?

HDFS Shell 命令简介

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

HDFS Shell命令有哪些常用操作及用法?-图1
(图片来源网络,侵删)

基本语法格式:

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 Shell命令有哪些常用操作及用法?-图2
(图片来源网络,侵删)
命令 描述 示例
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 目录下。

getput - 本地与 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 Shell命令有哪些常用操作及用法?-图3
(图片来源网络,侵删)
命令 描述 示例
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 putcopyFromLocal 功能相同
磁盘统计 du, count du -sh 是最常用的查看目录大小组合
权限管理 chmod, chown, chgrp -R 递归修改
副本管理 setrep 修改副本数,后台异步执行
回收站 expunge 清空回收站,永久删除

掌握这些命令,你就可以高效地管理 HDFS 上的数据了。

分享:
扫描分享到社交APP
上一篇
下一篇