Hadoop 2.7.3 作为 Hadoop 生态中的经典稳定版本,其 HDFS(Hadoop Distributed File System)命令是用户进行分布式文件管理操作的核心工具,掌握这些命令对于日常的 Hadoop 运维、数据处理及开发至关重要,以下将详细介绍 Hadoop 2.7.3 中常用的 HDFS 命令,涵盖文件与目录的基本操作、权限管理、块信息查看、集群状态监控等多个维度,并结合实例说明其使用方法。

HDFS 命令的基本语法格式为 hadoop fs [genericOptions] [command] [args]
,genericOptions
是可选的通用参数,如 -conf
指定配置文件、-D
设置属性等;command
是具体的操作命令;args
是命令所需的参数,对于 HDFS 特有的命令,也可直接使用 hadoop dfs
,但推荐使用 hadoop fs
以保持兼容性。
文件与目录基本操作
-
创建目录
使用mkdir
命令可在 HDFS 上创建目录,支持递归创建多级目录。hadoop fs -mkdir /input # 在根目录下创建 input 目录 hadoop fs -mkdir -p /data/logs # 递归创建多级目录,若父目录不存在则自动创建
-
上传本地文件到 HDFS
put
命令用于将本地文件或目录上传到 HDFS 指定路径。hadoop fs -put local.txt /input/ # 上传本地文件 local.txt 到 HDFS 的 /input 目录 hadoop fs -put -f local_dir /data # 上传本地目录 local_dir 到 HDFS 的 /data,若目标存在则覆盖(-f)
-
从 HDFS 下载文件到本地
get
命令用于将 HDFS 文件或目录下载到本地文件系统。(图片来源网络,侵删)hadoop fs -get /input/local.txt ./ # 下载 HDFS 文件到当前目录,可重命名 hadoop fs -get -r /data ./local_data # 递归下载 HDFS 目录到本地 local_data 目录
-
移动/重命名文件
mv
命令用于移动 HDFS 中的文件或目录,也可实现重命名。hadoop fs -mv /input/file1.txt /output/ # 将 file1.txt 从 /input 移动到 /output hadoop fs -mv /input/old_name.txt /input/new_name.txt # 重命名文件
-
复制文件
cp
命令用于复制 HDFS 中的文件或目录,支持递归复制。hadoop fs -cp /input/file1.txt /output/file1_copy.txt # 复制文件并重命名 hadoop fs -cp -r /input /backup # 递归复制 /input 目录到 /backup
-
删除文件或目录
rm
命令用于删除 HDFS 中的文件或目录,-r
或-R
参数用于递归删除目录。hadoop fs -rm /input/file1.txt # 删除文件 hadoop fs -rm -r /temp # 递归删除 /temp 目录及其内容
-
查看文件内容
(图片来源网络,侵删)cat
:查看文件内容,适合小文件。hadoop fs -cat /input/file1.txt
。head
:查看文件前几行内容,默认前 1000 行,可通过-n
指定行数。hadoop fs -head -n 50 /input/file1.txt
。tail
:查看文件末尾几行内容,默认末尾 1000 行,-f
参数可实时追踪文件更新(类似 Linux 的 tail -f)。
-
列出目录内容
ls
命令用于列出 HDFS 目录下的文件和子目录,-R
参数递归列出,-h
参数以人类可读格式显示文件大小(如 KB、MB)。hadoop fs -ls /input # 列出 /input 目录内容 hadoop fs -ls -h -R /data # 递归列出 /data 目录内容,并显示友好格式文件大小
文件权限与所有者管理
HDFS 支持类似 Linux 的权限模型,包括文件所有者(Owner)、所属组(Group)和权限(读、写、执行)。
-
修改文件权限
chmod
命令用于修改文件或目录权限。hadoop fs -chmod 755 /input/file1.txt # 设置权限为 rwxr-xr-x hadoop fs -chmod -R 750 /data # 递归设置 /data 目录及其内容权限为 rwxr-x---
-
修改所有者和所属组
chown
和chgrp
命令分别用于修改文件所有者和所属组。hadoop fs -chown user:group /input/file1.txt # 修改所有者为 user,所属组为 group hadoop fs -chgrp -R hadoop /data # 递归修改 /data 目录所属组为 hadoop
-
查看文件详细信息
ls -l
可显示文件的权限、所有者、大小、修改时间等详细信息。hadoop fs -ls -l /input/file1.txt
文件块信息与存储管理
HDFS 将大文件分割为多个块(Block,默认 128MB)进行存储,可通过命令查看块信息。
-
查看文件块信息
hadoop fsck
命令用于检查 HDFS 文件系统健康状况,也可查看文件块分布。hadoop fsck /input/file1.txt -files -blocks -locations # 查看 file1.txt 的块位置及存储节点
-
设置文件副本数
setrep
命令用于修改文件的副本数(默认为 3)。hadoop fs -setrep 2 /input/large_file.txt # 将 large_file.txt 的副本数设置为 2
集群状态与磁盘空间查看
-
查看 HDFS 总体使用情况
df
命令用于查看 HDFS 的磁盘使用情况,-h
参数以友好格式显示。hadoop fs -df -h /
-
查看目录或文件大小
du
命令用于计算文件或目录占用的空间,-s
参数汇总显示,-h
参数友好格式。hadoop fs -du -h /input # 查看 /input 目录总大小 hadoop fs -du -s -h /data/* # 汇总显示 /data 下各子目录大小
高级操作
-
到文件
appendToFile
命令将本地文件内容追加到 HDFS 文件末尾。hadoop fs -appendToFile local_append.txt /input/file1.txt
-
统计文件行数
count
命令统计指定目录下的文件数量、目录数量和总文件大小。hadoop fs -count /data
以下为部分常用 HDFS 命令的总结表格:
命令 | 功能描述 | 常用示例 |
---|---|---|
mkdir |
创建目录 | hadoop fs -mkdir -p /data/logs |
put |
上传本地文件到 HDFS | hadoop fs -put local.txt /input/ |
get |
从 HDFS 下载文件到本地 | hadoop fs -get /input/file1.txt ./ |
mv |
移动/重命名文件 | hadoop fs -mv /input/file1.txt /output/ |
cp |
复制文件 | hadoop fs -cp -r /input /backup |
rm |
删除文件或目录 | hadoop fs -rm -r /temp |
cat |
查看文件内容 | hadoop fs -cat /input/file1.txt |
ls |
列出目录内容 | hadoop fs -ls -h -R /data |
chmod |
修改文件权限 | hadoop fs -chmod 755 /input/file1.txt |
chown |
修改文件所有者 | hadoop fs -chown user:group /input/file1.txt |
fsck |
检查文件系统及查看块信息 | hadoop fsck /input/file1.txt -blocks |
setrep |
设置文件副本数 | hadoop fs -setrep 2 /input/large_file.txt |
df |
查看 HDFS 磁盘使用情况 | hadoop fs -df -h / |
du |
查看文件/目录大小 | hadoop fs -du -h /input |
appendToFile |
追加本地文件内容到 HDFS 文件 | hadoop fs -appendToFile local_append.txt /input/file1.txt |
count |
统计目录下文件数、大小等 | hadoop fs -count /data |
在实际使用中,需注意 HDFS 命令对路径的区分(HDFS 路径以 开头,本地路径需使用 file://
前缀或省略),以及权限问题(执行命令的用户需对目标路径有相应操作权限),对于大文件操作,建议在非高峰期执行以避免影响集群性能。
相关问答 FAQs
问题 1:执行 hadoop fs -put
命令上传大文件时,提示“Disk is full”错误,但 HDFS 集群还有剩余空间,可能是什么原因?
解答:该错误通常不是指 HDFS 存储空间不足,而是指 DataNode 本地磁盘空间不足,HDFS 文件块存储在 DataNode 的本地磁盘上,若某个 DataNode 的磁盘空间已满,会导致上传失败,可通过 hadoop dfsadmin -report
查看各 DataNode 的磁盘使用情况,清理对应 DataNode 的本地磁盘或增加磁盘空间即可解决。
问题 2:如何查看 HDFS 中某个文件的存储位置(即分布在哪些 DataNode 上)?
解答:可通过 hadoop fsck
命令结合 -locations
参数查看文件的块存储位置,执行 hadoop fsck /path/to/your/file -files -blocks -locations
,命令会输出文件的块信息(Block ID)、大小以及每个块所在的 DataNode 主机名和 IP 地址,从而了解文件的分布式存储细节。