您可以在已经创建好的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介绍。