HDFS常用命令全解析
HDFS(Hadoop Distributed File System)作为 Hadoop 生态的核心分布式存储系统,其命令操作与 Linux Shell 命令高度相似,仅需添加 hadoop fs 或 hdfs dfs 前缀即可使用。其中 dfs 是 fs 的具体实现,实际使用中两者功能基本一致。本文将详细解析 HDFS 的核心操作命令,帮助读者快速掌握 HDFS 的日常管理与使用。
基础语法与通用选项
HDFS 命令的基本语法格式为:
1 2 3
| hdfs dfs [通用选项] [命令] [命令参数] # 或 hadoop fs [通用选项] [命令] [命令参数]
|
常用通用选项
-conf <配置文件>:指定应用程序配置文件
-D <property=value>:定义配置属性值
-fs <文件系统>:指定默认文件系统(如 hdfs://namenode:port 或 file:///)
-jt <资源管理器>:指定 ResourceManager 地址
帮助命令
通过帮助命令可快速查询其他命令的用法,是学习 HDFS 命令的重要工具:
1 2 3 4 5
| # 查看所有命令的帮助摘要 hdfs dfs -help
# 查看特定命令的详细用法(以 cat 为例) hdfs dfs -help cat
|
执行后会显示命令的参数说明和功能描述,例如 hdfs dfs -help cat 会输出:
1 2 3 4
| # 会列出来该命令的参数以及作用 -cat [-ignoreCrc] <src> ... : Fetch all files that match the file pattern <src> and display their content on stdout.
|
查询类命令
列出目录内容(ls)
功能:类似 Linux 的 ls 命令,用于查看 HDFS 中的文件和目录信息。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #语法1 hdfs dfs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args> #语法2 hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args> # ls -R 表示查看目录以及子目录 # 常用示例 - 查看根目录内容: hdfs dfs -ls / - 递归查看目录及其子目录: hdfs dfs -ls -R /testHdfs - 以人类可读格式显示(KB/MB/GB): hdfs dfs -ls -h /testHdfs
|
参数说明:
-R:递归列出所有子目录内容
-h:以人类可读的单位显示文件大小
-t:按修改时间排序(最新在前)
-S:按文件大小排序
-d:仅显示目录本身,不显示内容
查看文件内容(cat)
功能:读取 HDFS 中的文件内容并输出到控制台。
1 2 3 4 5 6 7
| #语法1 hdfs dfs -cat [-ignoreCrc] URI [URI ...] #语法2 hadoop fs -cat [-ignoreCrc] URI [URI ...] # 示例 hdfs dfs -cat /testHdfs/logs/app.log
# 忽略 CRC 校验错误(用于读取可能损坏的文件) hdfs dfs -cat -ignoreCrc /testHdfs/corrupted_file.txt
|
查看文件末尾(tail)
功能:类似 Linux 的 tail 命令,显示文件的最后 1KB 内容,支持实时跟踪。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -tail [-f] URI #语法2 hadoop fs -tail [-f] URI # 示例 - 查看文件末尾内容: hdfs dfs -tail /testHdfs/logs/app.log - 实时跟踪文件新增内容(类似 tail -f): hdfs dfs -tail -f /testHdfs/logs/app.log
|
统计目录 / 文件大小(du)
功能:计算指定路径的磁盘使用情况。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -du [-s] [-h] [-v] [-x] URI [URI ...] #语法2 hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...] # 示例 - 统计目录下各文件大小: hdfs dfs -du /testHdfs/data - 以人类可读格式统计总大小(-s 表示汇总): hdfs dfs -du -s -h /testHdfs
|
参数说明:
-s:仅显示总大小,不列出每个文件的大小
-h:以人类可读单位显示(KB/MB/GB)
-x:排除快照目录的大小统计
查看文件系统磁盘使用情况(df)
功能:类似 Linux 的 df 命令,显示文件系统的总空间、已用空间和可用空间。
1 2 3 4 5
| # 基础语法 hdfs dfs -df [-h] [<path> ...]
# 示例 hdfs dfs -df -h / # 以人类可读格式显示根目录所在文件系统的磁盘信息
|
目录操作命令
创建目录(mkdir)
功能:在 HDFS 中创建目录,支持递归创建多级目录。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -mkdir [-p] <paths> #语法2 hadoop fs -mkdir [-p] <paths> # 示例 - 创建单级目录: hdfs dfs -mkdir /testHdfs - 递归创建多级目录(父目录不存在时自动创建): hdfs dfs -mkdir -p /testHdfs/tmp/logs
|
参数说明:
删除空目录(rmdir)
功能:删除 HDFS 中的空目录,若目录非空则删除失败。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -rmdir [--ignore-fail-on-non-empty] URI [URI ...] #语法2 hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...] # 示例 - 删除空目录: hdfs dfs -rmdir /testHdfs/empty_dir - 忽略非空目录的删除失败错误: hdfs dfs -rmdir --ignore-fail-on-non-empty /testHdfs/non_empty_dir
|
文件操作命令
上传文件到 HDFS
剪切本地文件到 HDFS(moveFromLocal)
功能:将本地文件剪切到 HDFS,操作后本地文件会被删除。
1 2 3 4
| #语法1 hdfs dfs -moveFromLocal <localsrc> <dst> #语法2 hadoop fs -moveFromLocal <localsrc> <dst> # 示例 hdfs dfs -moveFromLocal ./temp.log /testHdfs/logs/ # 剪切本地 temp.log 到 HDFS
|
这里注意一下,这个操作是剪切操作,操作之后本地的文件就不存在了
复制本地文件到 HDFS(copyFromLocal/put)
copyFromLocal:从本地文件系统复制文件到 HDFS,源路径必须是本地文件
put:功能与 copyFromLocal 类似,支持从标准输入(-)读取数据
1 2 3 4 5 6 7 8 9 10 11 12
| #语法1 hdfs dfs -copyFromLocal <localsrc> URI #语法2 hadoop fs -copyFromLocal <localsrc> URI
# 示例 - 复制本地文件到 HDFS: hdfs dfs -copyFromLocal ./local_data.txt /testHdfs/data/ - 覆盖已存在文件(-f)并保留文件属性(-p): hdfs dfs -put -f -p ./config.ini /testHdfs/conf/ - 从标准输入读取数据并写入 HDFS 文件: echo "hello hdfs" | hdfs dfs -put - /testHdfs/hello.txt
|
参数说明:
-f:若目标文件已存在则覆盖
-p:保留源文件的属性(权限、时间戳等)
从 HDFS 下载文件
复制 HDFS 文件到本地(copyToLocal/get)
copyToLocal:从 HDFS 复制文件到本地文件系统
get:功能与 copyToLocal 完全一致,是更常用的别名
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -copyToLocal [-ignorecrc] [-crc] URI <localdst> #语法2 hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst> # 示例 - 下载 HDFS 文件到本地: hdfs dfs -get /testHdfs/data/result.txt ./local_result.txt - 覆盖本地已存在文件并保留属性: hdfs dfs -get -f -p /testHdfs/conf/config.ini ./
|
合并下载多个文件(getmerge)
功能:将 HDFS 目录下的多个文件合并为一个本地文件,常用于小文件合并。
1 2 3 4 5 6 7 8 9 10 11
| #语法1 hdfs dfs -getmerge [-nl] <src> <localdst> #语法2 hadoop fs -getmerge [-nl] <src> <localdst>
# 示例 - 合并 HDFS 目录下的所有文件到本地: hdfs dfs -getmerge /testHdfs/splits/ ./merged_file.txt - 多个文件合并 hdfs dfs -getmerge /testHdfs/tmp/test.xml /testHdfs/tmp/test1.xml ./merge.xml - 合并时添加换行符分隔(-nl)并跳过空文件: hdfs dfs -getmerge -nl -skip-empty-file /testHdfs/logs/ ./all_logs.txt
|
HDFS 内部文件操作
追加内容到文件(appendToFile)
功能:将本地文件内容追加到 HDFS 已存在的文件末尾(HDFS 早期版本不支持文件修改,此命令提供有限的追加能力)。
1 2 3 4 5
| #语法1 hdfs dfs -appendToFile <localsrc> ... <dst> #语法2 hadoop fs -appendToFile <localsrc> ... <dst> # 示例 - 追加本地文件到 HDFS 文件: hdfs dfs -appendToFile ./new_logs.txt /testHdfs/logs/app.log
|
复制 HDFS 文件(cp)
功能:在 HDFS 内部复制文件或目录到目标路径。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest> #语法2 hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest> # 示例 - 复制文件到目标目录: hdfs dfs -cp /testHdfs/data/file1.txt /testHdfs/backup/ - 覆盖目标文件并保留属性: hdfs dfs -cp -f -p /testHdfs/conf/config.ini /testHdfs/conf/config_bak.ini
|
移动 HDFS 文件(mv)
功能:在 HDFS 内部移动文件或目录,可用于重命名文件。
1 2 3 4 5 6 7 8
| #语法1 hdfs dfs -mv URI [URI ...] <dest> #语法2 hadoop fs -mv URI [URI ...] <dest> # 示例 - 移动文件到目标目录: hdfs dfs -mv /testHdfs/temp/file.txt /testHdfs/data/ - 重命名文件: hdfs dfs -mv /testHdfs/old_name.txt /testHdfs/new_name.txt
|
删除 HDFS 文件 / 目录(rm)
功能:删除 HDFS 中的文件或目录,支持递归删除。
1 2 3 4 5 6 7 8 9 10 11
| #语法1 hdfs dfs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...] #语法2 hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...] # 示例 - 删除文件: hdfs dfs -rm /testHdfs/tmp/merge.xml
# -r删除目录以及目录下的文件 hdfs dfs -rm -r /testHdfs/tmp
# 清空回收站 -skipTrash是直接永久删除,不经过回收站(否则会形成无限循环) hdfs dfs -rm -r -skipTrash /user/<用户名>/.Trash/*
|
参数说明:
-f:强制删除,无提示
-r/-R:递归删除目录及其内容
-skipTrash:直接永久删除,不经过回收站(默认会放入回收站)
文件属性与权限操作
修改文件权限(chmod)
功能:类似 Linux 的 chmod,修改 HDFS 文件或目录的权限。
1 2 3 4 5 6 7 8 9
| # 基础语法 hdfs dfs -chmod [-R] <权限模式> <HDFS路径> ...
# 示例 - 为文件设置读写权限: hdfs dfs -chmod 644 /testHdfs/data/file.txt - 递归修改目录及内容的权限: hdfs dfs -chmod -R 755 /testHdfs/app/
|
修改文件所有者(chown)
功能:修改 HDFS 文件或目录的所有者和所属组。
1 2 3 4 5 6 7 8 9
| # 基础语法 hdfs dfs -chown [-R] [所有者][:[所属组]] <HDFS路径> ...
# 示例 - 修改所有者: hdfs dfs -chown hadoopuser /testHdfs/data/ - 递归修改所有者和所属组: hdfs dfs -chown -R hadoopuser:hadoopgroup /testHdfs/app/
|
修改文件副本数(setrep)
功能:设置 HDFS 文件的副本数量(默认副本数由 dfs.replication 配置)。
1 2 3 4 5 6 7 8 9
| # 基础语法 hdfs dfs -setrep [-R] [-w] <副本数> <HDFS路径> ...
# 示例 - 为文件设置副本数为 3: hdfs dfs -setrep 3 /testHdfs/important_data.txt - 递归设置目录下所有文件的副本数并等待完成: hdfs dfs -setrep -R -w 2 /testHdfs/dataset/
|
参数说明:
-R:递归设置目录下所有文件
-w:等待副本数调整完成后返回
快照管理命令
HDFS 支持为目录创建快照(Snapshot),用于数据备份和恢复。
创建快照(createSnapshot)
1 2 3 4 5
| # 基础语法 hdfs dfs -createSnapshot <快照目录> [<快照名称>]
# 示例 hdfs dfs -createSnapshot /testHdfs backup_20240723 # 为目录创建指定名称的快照
|
删除快照(deleteSnapshot)
1 2 3 4 5
| # 基础语法 hdfs dfs -deleteSnapshot <快照目录> <快照名称>
# 示例 hdfs dfs -deleteSnapshot /testHdfs backup_20240723 # 删除指定快照
|
回收站操作
HDFS 有回收站(Trash)机制,删除的文件默认会保留在回收站(/user/<用户名>/.Trash)一段时间,可通过以下命令管理:
1 2 3 4 5 6 7 8
| # 查看回收站内容 hdfs dfs -ls /user/<用户名>/.Trash/
# 永久删除回收站内容(清空回收站) hdfs dfs -rm -r -skipTrash /user/<用户名>/.Trash/*
# 立即清理回收站(通常由系统自动执行,此命令强制触发) hdfs dfs -expunge
|
v1.3.10