HDFS常用命令

您可以在已经创建好的E-MapReduce(简称EMR)集群中,直接使用hadoop fs命令来对HDFS中的文件进行操作。本文为您介绍HDFS的常见命令。

前提条件

在执行任何命令前,请确保已满足以下条件:

  • 集群访问:已通过SSH等方式登录集群的某一台节点(通常是主节点)。

  • 用户权限:使用的账户(如默认的hadoop用户)拥有对目标HDFS路径的读写权限。在开启Kerberos认证的集群中,需要先进行身份认证

命令版本说明

Hadoop提供了两种等效的命令格式来操作文件系统:

  • hdfs dfs <args>:这是专门针对HDFS的命令。

  • hadoop fs <args>:通用文件系统命令,可以操作HDFS、本地文件系统(file:///)等多种Hadoop兼容的文件系统。

本文所有示例将统一使用hadoop fs

命令速查表

下表汇总了HDFS最常用的操作命令,方便快速查找。

命令

功能

常用语法

mkdir

HDFS中创建新目录。

hadoop fs -mkdir [-p] <paths>

touchz

HDFS中创建一个大小为0字节的空文件。

hadoop fs -touchz URI [URI ...]

ls

查看指定路径下的文件和目录列表及其基本信息。

hadoop fs -ls [-h] [-R] [-t] <args>

put

将本地文件系统(执行命令的EMR节点)上的一个或多个文件复制到HDFS。

hadoop fs -put [-f] [-p] <localsrc> <dst>

get

HDFS上的文件或目录复制到本地文件系统(执行命令的EMR节点)。

hadoop fs -get [-f] [-p] <src> <localdst>

cp

HDFS内部复制文件或目录。

hadoop fs -cp [-f] URI [URI ...] <dest>

mv

HDFS内部移动或重命名文件/目录。

hadoop fs -mv URI [URI ...] <dest>

rm

删除HDFS中的文件或目录。

hadoop fs -rm [-f] [-r] [-skipTrash] URI [URI ...]

cat

查看HDFS上文件的内容。

hadoop fs -cat URI [URI ...]

du

显示文件的大小或者目录中所有文件的大小。

hadoop fs -du [-s] [-h] URI [URI ...]

更多HDFS操作命令,请参见Apache Hadoop官网

目录与文件管理

mkdir:创建目录

HDFS中创建新目录。

  • 语法

    hadoop fs -mkdir [-p] <paths>
  • 参数说明

    • -p:沿路径创建所有不存在的父目录,类似于Linuxmkdir -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.txtHDFS/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

    • 原因:当前用户没有对目标文件或目录的读/写/执行权限。

    • 解决方案:

      1. 使用hdfs dfs -ls <parent_dir>检查文件或其父目录的权限。

      2. 联系管理员使用chmodchown授权。

      3. 如果环境开启了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指向的是HANameService名称(如 hdfs://mycluster),而不是某个具体的NameNode主机名。

相关文档