HDFS基本命令
HDFS常用命令全解析
HDFS(Hadoop Distributed File System)作为 Hadoop 生态的核心分布式存储系统,其命令操作与 Linux Shell 命令高度相似,仅需添加 hadoop fs 或 hdfs dfs 前缀即可使用。其中 dfs 是 fs 的具体实现,实际使用中两者功能基本一致。
基础语法与通用选项
HDFS 命令的基本语法格式为:
hdfs dfs [通用选项] [命令] [命令参数]
或
hadoop fs [通用选项] [命令] [命令参数]
常用通用选项
-conf <配置文件>:指定应用程序配置文件-D <property=value>:定义配置属性值-fs <文件系统>:指定默认文件系统(如hdfs://namenode:port或file:///)-jt <资源管理器>:指定 ResourceManager 地址
帮助命令
通过帮助命令可快速查询其他命令的用法,是学习 HDFS 命令的重要工具:
查看所有命令的帮助摘要
hdfs dfs -help
查看特定命令的详细用法(以 cat 为例)
hdfs dfs -help cat
执行后会显示命令的参数说明和功能描述,例如 hdfs dfs -help cat 会输出:
会列出来该命令的参数以及作用
-cat [-ignoreCrc] <src> ... :
Fetch all files that match the file pattern <src> and display their content on
stdout.
查询类命令
列出目录内容(ls)
功能:类似 Linux 的 ls 命令,用于查看 HDFS 中的文件和目录信息。
语法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 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 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 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 命令,显示文件系统的总空间、已用空间和可用空间。
基础语法
hdfs dfs -df [-h] [<path> ...]
示例
hdfs dfs -df -h / # 以人类可读格式显示根目录所在文件系统的磁盘信息
目录操作命令
创建目录(mkdir)
功能:在 HDFS 中创建目录,支持递归创建多级目录。
语法1 hdfs dfs -mkdir [-p] <paths>
语法2 hadoop fs -mkdir [-p] <paths>
示例
- 创建单级目录:
hdfs dfs -mkdir /testHdfs
- 递归创建多级目录(父目录不存在时自动创建):
hdfs dfs -mkdir -p /testHdfs/tmp/logs
参数说明:
-p:递归创建目录,若目录已存在则不报错
删除空目录(rmdir)
功能:删除 HDFS 中的空目录,若目录非空则删除失败。
语法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 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 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 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 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 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 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 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 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 文件或目录的权限。
基础语法
hdfs dfs -chmod [-R] <权限模式> <HDFS路径> ...
示例
- 为文件设置读写权限:
hdfs dfs -chmod 644 /testHdfs/data/file.txt
- 递归修改目录及内容的权限:
hdfs dfs -chmod -R 755 /testHdfs/app/
修改文件所有者(chown)
功能:修改 HDFS 文件或目录的所有者和所属组。
基础语法
hdfs dfs -chown [-R] [所有者][:[所属组]] <HDFS路径> ...
示例
- 修改所有者:
hdfs dfs -chown hadoopuser /testHdfs/data/
- 递归修改所有者和所属组:
hdfs dfs -chown -R hadoopuser:hadoopgroup /testHdfs/app/
修改文件副本数(setrep)
功能:设置 HDFS 文件的副本数量(默认副本数由 dfs.replication 配置)。
基础语法
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)
基础语法
hdfs dfs -createSnapshot <快照目录> [<快照名称>]
示例
hdfs dfs -createSnapshot /testHdfs backup_20240723 # 为目录创建指定名称的快照
删除快照(deleteSnapshot)
基础语法
hdfs dfs -deleteSnapshot <快照目录> <快照名称>
示例
hdfs dfs -deleteSnapshot /testHdfs backup_20240723 # 删除指定快照
回收站操作
HDFS 有回收站(Trash)机制,删除的文件默认会保留在回收站(/user/<用户名>/.Trash)一段时间,可通过以下命令管理:
查看回收站内容
hdfs dfs -ls /user/<用户名>/.Trash/
永久删除回收站内容(清空回收站)
hdfs dfs -rm -r -skipTrash /user/<用户名>/.Trash/*
立即清理回收站(通常由系统自动执行,此命令强制触发)
hdfs dfs -expunge