您可以在已经创建好的E-MapReduce(简称EMR)集群中,直接使用hadoop fs命令来对HDFS中的文件进行操作。本文为您介绍HDFS的常见命令。
前提条件
在执行任何命令前,请确保已满足以下条件:
命令版本说明
Hadoop提供了两种等效的命令格式来操作文件系统:
hdfs dfs <args>
:这是专门针对HDFS的命令。hadoop fs <args>
:通用文件系统命令,可以操作HDFS、本地文件系统(file:///
)等多种Hadoop兼容的文件系统。
本文所有示例将统一使用hadoop fs
。
命令速查表
下表汇总了HDFS最常用的操作命令,方便快速查找。
命令 | 功能 | 常用语法 |
在HDFS中创建新目录。 |
| |
在HDFS中创建一个大小为0字节的空文件。 |
| |
查看指定路径下的文件和目录列表及其基本信息。 |
| |
将本地文件系统(执行命令的EMR节点)上的一个或多个文件复制到HDFS。 |
| |
将HDFS上的文件或目录复制到本地文件系统(执行命令的EMR节点)。 |
| |
在HDFS内部复制文件或目录。 |
| |
在HDFS内部移动或重命名文件/目录。 |
| |
删除HDFS中的文件或目录。 |
| |
查看HDFS上文件的内容。 |
| |
显示文件的大小或者目录中所有文件的大小。 |
|
更多HDFS操作命令,请参见Apache Hadoop官网。
目录与文件管理
mkdir:创建目录
在HDFS中创建新目录。
语法
hadoop fs -mkdir [-p] <paths>
参数说明
-p
:沿路径创建所有不存在的父目录,类似于Linux的mkdir -p
。这是生产环境中最常用的参数,可以避免因父目录不存在而导致的错误。
示例:在HDFS文件系统中,创建/dir目录。
hadoop fs -mkdir /dir
touchz:创建空文件
在HDFS中创建一个大小为0字节的空文件。
语法
hadoop fs -touchz URI [URI ...]
使用场景
作为任务处理完成的标记(marker file)。
在执行数据处理前,预先创建一个空的输出文件。
示例:在HDFS文件系统/dir/目录下的新建emptyfile.txt文件。
hadoop fs -touchz /dir/emptyfile.txt
ls:列出文件和目录
查看指定路径下的文件和目录列表及其基本信息。
语法
hadoop fs -ls [-h] [-R] [-t] <args>
参数说明
-h
:以人类可读的格式显示文件大小(例如,1K, 234M, 2G)。-R
:递归列出所有子目录的内容。-t
:按修改时间排序,最新的文件或目录显示在最前面。
示例:查看创建的
dir
目录。hadoop fs -ls /dir
文件传输
put:上传文件到HDFS
将本地文件系统(执行命令的EMR节点)上的一个或多个文件复制到HDFS。
语法
hadoop fs -put [-f] [-p] <localsrc> <dst>
参数说明
-f
:强制覆盖目标路径上已存在的文件。-p
:保留文件的访问和修改时间、所有权和权限。
示例:上传本地文件hello.txt至HDFS的/dir/sub-dir路径下。
hadoop fs -put hello.txt /dir/sub-dir
get:从HDFS下载文件
将HDFS上的文件或目录复制到本地文件系统(执行命令的EMR节点)。
语法
hadoop fs -get [-f] [-p] <src> <localdst>
参数说明
-f
:强制覆盖目标路径上已存在的文件。-p
:保留文件的访问和修改时间、所有权和权限。
示例:复制HDFS文件/dir/emptyfile.txt至本地的/路径下。
hadoop fs -get /dir/emptyfile.txt /
文件操作
cp:复制文件或目录
在HDFS内部复制文件或目录。
语法
hadoop fs -cp [-f] URI [URI ...] <dest>
参数说明
-f
:强制覆盖目标路径上已存在的文件。
示例:复制/dir/sub-dir/目录下的文件hello_world.txt至/tmp目录下。
hadoop fs -cp /dir/sub-dir/hello_world.txt /tmp
mv:移动或重命名文件或目录
在HDFS内部移动或重命名文件/目录。这是一个原子操作,在同一文件系统内移动时,数据块不会实际移动,只会更新元数据,速度极快。
语法
hadoop fs -mv URI [URI ...] <dest>
示例
移动/tmp/目录下的文件hello_world2.txt至/dir/sub-dir/目录下。
hadoop fs -mv /tmp/hello_world2.txt /dir/sub-dir/
移动/tmp/路径下的test目录至/dir/sub-dir/目录下。
hadoop fs -mv /tmp/test /dir/sub-dir/
rm:删除文件或目录
删除HDFS中的文件或目录。
语法
hadoop fs -rm [-f] [-r] [-skipTrash] URI [URI ...]
参数说明
-r
:递归删除目录及其所有内容。删除目录时必须使用此参数。-f
:强制删除。如果文件不存在,命令不会报错。-skipTrash
:永久删除,跳过回收站。请极度谨慎使用此选项! 默认情况下,删除的文件会移入当前用户的回收站目录(/user/<username>/.Trash/
)。
示例:删除HDFS系统中/dir/sub-dir/目录下的文件hello_world2.txt。
hadoop fs -rm /dir/sub-dir/hello_world2.txt
hadoop fs -rmr
命令已被弃用,请使用 hadoop fs -rm -r
命令来递归删除目录。
文件查看
cat:查看文件内容
查看HDFS上文件的内容。
语法
hadoop fs -cat URI [URI ...]
示例
查看hello.txt文件的内容。
hadoop fs -cat /hello.txt
查看/dir/sub-dir/目录下hello_world.txt文件的内容。
hadoop fs -cat /dir/sub-dir/hello_world.txt
du:显示文件大小
显示文件的大小或者目录中所有文件的大小。
语法
hadoop fs -du [-s] [-h] URI [URI ...]
参数说明
-s
:显示总计大小,而不是每个文件/目录的大小。-h
:以人类可读的格式显示大小。
示例
查看文件的大小。
hadoop fs -du /hello.txt
查看目录下所有文件的大小。
hadoop fs -du /dir
常见问题
Permission denied
原因:当前用户没有对目标文件或目录的读/写/执行权限。
解决方案:
使用
hdfs dfs -ls <parent_dir>
检查文件或其父目录的权限。联系管理员使用
chmod
或chown
授权。如果环境开启了Kerberos,请确认已使用
kinit
获取票据。
SafeModeException: NameNode is in safe mode
原因:NameNode正在启动过程中,处于安全模式,不接受写操作。
解决方案:等待几分钟,NameNode会自动退出安全模式。可使用
hdfs dfsadmin -safemode get
查看状态。非紧急情况不建议手动强制退出。
No such file or directory
原因:指定的路径不存在。
解决方案:仔细检查路径拼写。如果要写入文件,请确保其父目录已存在,或在
mkdir
时使用-p
参数。
StandbyException: Operation category READ is not supported in state standby
原因:在HA(高可用)配置中,尝试向处于Standby状态的NameNode发送了读写请求。
解决方案:检查Hadoop配置文件(
core-site.xml
),确保fs.defaultFS
指向的是HA的NameService名称(如hdfs://mycluster
),而不是某个具体的NameNode主机名。
相关文档
如果您的集群开启了高可用,请参见HDFS高可用相关命令(HaAdmin)介绍。
如需在Hadoop集群之间,或在HDFS与对象存储(如OSS)之间迁移数据,请参见Hadoop DistCp介绍。