hdfs命令(一)- hdfs dfs命令

文章目录


前言

Hadoop分布式文件系统(HDFS)是一种基于Java的,设计用于存储和处理大规模数据集的文件系统。由于其可靠性和高效的存储能力,HDFS在大数据处理领域中得到了广泛应用。掌握HDFS的常用命令可以使用户高效地管理和操作文件系统中的数据。

本文将详细介绍HDFS的基本命令和其用法,包括如何创建目录、上传和下载文件、文件管理操作(如移动、重命名和删除)、权限与所有权管理等。通过示例讲解,读者将能够直观理解每个命令的作用及其应用场景,同时附上相关示例。


一、hdfs dfs命令用法

hdfs dfs命令的用法如下:

用法: hdfs dfs [通用选项]
        [-appendToFile <localsrc> ... <dst>]
        [-cat [-ignoreCrc] <src> ...]
        [-checksum [-v] <src> ...]
        [-chgrp [-R] GROUP PATH...]
        [-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
        [-chown [-R] [OWNER][:[GROUP]] PATH...]
        [-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
        [-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
        [-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
        [-createSnapshot <snapshotDir> [<snapshotName>]]
        [-deleteSnapshot <snapshotDir> <snapshotName>]
        [-df [-h] [<path> ...]]
        [-du [-s] [-h] [-v] [-x] <path> ...]
        [-expunge [-immediate] [-fs <path>]]
        [-find <path> ... <expression> ...]
        [-get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
        [-getfacl [-R] <path>]
        [-getfattr [-R] {-n name | -d} [-e en] <path>]
        [-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
        [-head <file>]
        [-help [cmd ...]]
        [-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
        [-mkdir [-p] <path> ...]
        [-moveFromLocal <localsrc> ... <dst>]
        [-moveToLocal <src> <localdst>]
        [-mv <src> ... <dst>]
        [-put [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
        [-renameSnapshot <snapshotDir> <oldName> <newName>]
        [-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
        [-rmdir [--ignore-fail-on-non-empty] <dir> ...]
        [-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
        [-setfattr {-n name [-v value] | -x name} <path>]
        [-setrep [-R] [-w] <rep> <path> ...]
        [-stat [format] <path> ...]
        [-tail [-f] [-s <sleep interval>] <file>]
        [-test -[defswrz] <path>]
        [-text [-ignoreCrc] <src> ...]
        [-touch [-a] [-m] [-t TIMESTAMP ] [-c] <path> ...]
        [-touchz <path> ...]
        [-truncate [-w] <length> <path> ...]
        [-usage [cmd ...]]

支持的通用选项有:
-conf <configuration file>        指定应用程序配置文件
-D <property=value>               为给定属性定义一个值
-fs <file:///|hdfs://namenode:port> 指定要使用的默认文件系统URL,从配置中覆盖‘fs.defaultFS’属性。
-jt <local|resourcemanager:port>  指定一个ResourceManager
-files <file1,...>                指定要复制到map reduce集群的文件列表,以逗号分隔
-libjars <jar1,...>               指定要包含在类路径中的以逗号分隔的jar文件列表
-archives <archive1,...>          指定一个由逗号分隔的归档文件列表,这些归档文件将在计算节点上被解压

通用命令行语法为:
command [通用选项] [命令选项]

二、命令

1. 创建目录

1.1 语法及解释

hdfs dfs -mkdir [-p] <hdfs目录路径> ...
  • -p:表示创建多级目录。
  • ...:表示可以一次性创建多个目录。

1.2 示例

创建目录/test

hdfs dfs -mkdir /test

创建多级目录/test/test01/demo01

hdfs dfs -mkdir -p /test/test01/demo01

同时创建多级目录/test/test02/demo02/test/test03/demo03

hdfs dfs -mkdir -p /test/test02/demo02 /test/test03/demo03

在这里插入图片描述

2. 列出目录内容

2.1 语法及解释

hdfs dfs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<hdfs路径> ...]
  • -C:只列出文件名或目录名,一行一个,不显示其他信息。
  • -d:如果目标是一个目录,则只列出该目录本身的信息,而不是其内容。
  • -h:以人类可读的格式显示文件大小(例如K, M, G等单位)。
  • -q:在每个文件名中的空格前添加引号,以便处理文件名中有空格的情况。
  • -R:递归地列出所有子目录的内容。
  • -t:根据修改时间排序,最近修改的最后显示。加上 -r 选项可以反转排序顺序。
  • -S:根据文件大小排序,最大的最后显示。同样地,加上 -r 选项可以反转排序顺序。
  • -r:反转排序顺序,通常与 -t-S 一起使用来改变默认的排序方向。
  • -u:按照访问时间而不是修改时间排序。
  • -e:显示扩展属性(如果存在)。请注意,不是所有的 Hadoop 版本都支持这个选项。

2.2 示例

列出目录/test中的文件或目录信息。

hdfs dfs -ls /test

在这里插入图片描述
只列出目录/test中文件名或目录名。

hdfs dfs -ls -C /test

在这里插入图片描述

列出目录/test本身的信息。

hdfs dfs -ls -d /test

在这里插入图片描述

以人类可读的格式列出目录/test中文件或目录的大小。

hdfs dfs -ls -h /test

递归地列出目录/test中所有子目录的内容。

hdfs dfs -ls -R /test

在这里插入图片描述

3. 上传文件到HDFS

3.1 语法及解释

hdfs dfs -copyFromLocal [-f] [-p] [-l] [-d] [-t <线程数>] <Linux本地文件路径> ... <hdfs目录路径>

hdfs dfs -put [-f] [-p] [-l] [-d] <Linux本地文件路径> ... <hdfs目录路径>
  • [-f]:强制覆盖目标路径上的现有文件。如果不使用 -f 选项,而目标路径已经存在同名文件,则命令会失败。
  • [-p]:保留源文件的属性,包括权限、时间戳等。请注意,用户和组信息可能不会被保留,因为它们取决于具体的用户映射配置。
  • [-l]:允许符号链接的复制。默认情况下,符号链接会被解析为实际文件或目录进行复制。使用 -l 选项时,符号链接本身将被复制到 HDFS 中,而不是它指向的实际内容。
  • [-d]:如果目标是一个已存在的目录,并且源是多个文件或目录,则此选项会将这些源直接放入目标目录中,而不是在目标目录下创建与源同名的子目录。这在批量上传文件时非常有用。
  • [-t <线程数>]:指定使用的线程数以并发上传多个文件。增加线程数可以提高上传速度,但也会增加系统资源消耗。请根据您的网络环境和服务器性能调整这个值。

3.2 示例

在Linux本地创建三个文件并添加内容作为演示。

mkdir -p /export/data/demo
echo -e "aaaaaaaaaaa\nbbbbbbbbbbb\nccccccccccccc" >> /export/data/demo/f1.txt
echo -e "ddddddddddd\neeeeeeeeeee\nfffffffffffff" >> /export/data/demo/f2.txt
echo -e "ggggggggggg\nhhhhhhhhhhh\nkkkkkkkkkkkkk" >> /export/data/demo/f3.txt

在hdfs创建目录用于存放上传的文件。

hdfs dfs -mkdir -p /test/demo1 /test/demo2 /test/demo3

把文件/export/data/demo/f1.txt上传到hdfs的/test/demo1目录。

hdfs dfs -put /export/data/demo/f1.txt /test/demo1

把文件/export/data/demo/f2.txt/export/data/demo/f3.txt上传到hdfs的/test/demo1目录。

hdfs dfs -put /export/data/demo/f2.txt /export/data/demo/f3.txt /test/demo1

把文件/export/data/demo/f1.txt上传到hdfs的/test/demo1目录,覆盖已经上传的/test/demo1/f1.txt文件。

hdfs dfs -put -f /export/data/demo/f1.txt /test/demo1

把目录/export/data/demo中的所有文件覆盖上传到hdfs的/test/demo1目录。

hdfs dfs -put -f /export/data/demo/* /test/demo1

使用3个线程把目录/export/data/demo中的所有文件上传到hdfs的/test/demo3目录。

hdfs dfs -copyFromLocal -t 3 /export/data/demo/* /test/demo3

4. 将本地文件内容追加到HDFS文件中

4.1 语法

hdfs dfs -appendToFile  <Linux本地文件路径> ... <hdfs目录路径>

4.2 示例

把文件/export/data/demo/f2.txt内容追加到hdfs的/test/demo1/f1.txt文件中。

hdfs dfs -appendToFile /export/data/demo/f2.txt /test/demo1/f1.txt

把文件/export/data/demo/f1.txt/export/data/demo/f3.txt的内容追加到hdfs的/test/demo1/f1.txt文件中。

hdfs dfs -appendToFile /export/data/demo/f1.txt /export/data/demo/f3.txt /test/demo1/f1.txt

5. 查看文件内容

5.1 语法及解释

hdfs dfs -cat [-ignoreCrc] <hdfs文件路径> ...
hdfs dfs -head <hdfs文件路径>
hdfs dfs -tail [-f] [-s <sleep interval>] <file>
  • -ignoreCrc:忽略CRC校验错误。
  • [-f]:持续输出文件新增加的内容。
  • [-s <sleep interval>]:与 -f 一起使用时,定义程序检查文件更新的频率(以秒为单位)。

5.2 示例

查看hdfs上文件/test/demo1/f1.txt的内容。

hdfs dfs -cat /test/demo1/f1.txt

在这里插入图片描述
查看hdfs上文件/test/demo1/f2.txt/test/demo1/f3.txt的内容。

hdfs dfs -cat /test/demo1/f2.txt /test/demo1/f3.txt

在这里插入图片描述
查看hdfs上目录/test/demo1下所有文件的内容。

hdfs dfs -cat /test/demo1/*

在这里插入图片描述

查看hdfs上文件/test/demo1/f1.txt开头的部分内容。

hdfs dfs -head /test/demo1/f1.txt

查看hdfs上文件/test/demo1/f1.txt末尾的部分内容。

hdfs dfs -tail /test/demo1/f1.txt

持续查看hdfs上文件/test/demo1/f1.txt末尾的部分内容。

hdfs dfs -tail -f /test/demo1/f1.txt

6. 从HDFS下载文件到本地文件系统

  • -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>:从 HDFS 复制文件到本地文件系统。
  • -get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>:同 -copyToLocal,用于获取文件。

6.1 语法及解释

hdfs dfs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <hdfs文件路径> ... <Linux本地目录路径>

hdfs dfs -get [-f] [-p] [-ignoreCrc] [-crc] <hdfs文件路径> ... <Linux本地目录路径>
  • -f:如果本地目标文件已经存在,则强制覆盖它。如果没有这个选项而文件已存在的话,复制操作将会失败。

  • -p:保留文件的访问时间和修改时间。此外,对于文件,它还会尝试保留权限。

  • -ignoreCrc:忽略 CRC(循环冗余校验)检查。CRC 检查是一种错误检测机制,用来确保数据在传输过程中没有被损坏。使用此选项时,即使文件的 CRC 校验不匹配也不会导致复制失败。

  • -crc:同时复制与源文件关联的 CRC 校验文件。

6.2 示例

把hdfs上的/test/demo1/f1.txt文件下载到Linux本地/tmp目录下。

hdfs dfs -get /test/demo1/f1.txt /tmp

把hdfs上的/test/demo1/f2.txt/test/demo1/f3.txt文件下载到Linux本地/tmp目录下。

hdfs dfs -get /test/demo1/f2.txt /test/demo1/f3.txt /tmp

把hdfs上的/test/demo1/f1.txt文件强制覆盖下载到Linux本地/tmp目录下。

hdfs dfs -get -f /test/demo1/f1.txt /tmp

7. 移动或重命名 HDFS 上的文件

7.1 语法

-mv <hdfs源目录路径或文件路径> ... <hdfs目标目录路径或文件路径>

7.2 示例

把hdfs上/test/demo1/f1.txt文件移动到/test/demo2目录下并重命名为f1_new.txt文件。

hdfs dfs -mv /test/demo1/f1.txt /test/demo2/f1_new.txt

把hdfs上/test/demo1/f2.txt/test/demo1/f3.txt文件移动到/test/demo2目录下。

hdfs dfs -mv /test/demo1/f2.txt /test/demo1/f3.txt /test/demo2

把hdfs上/test/demo2目录下的所有文件或目录移动到/test/demo1目录下。

hdfs dfs -mv /test/demo2/* /test/demo1

把hdfs上/test/test01目录移动到/test/test02目录下。

hdfs dfs -mv /test/test01 /test/test02

8. HDFS上文件复制

8.1 语法及解释

hdfs dfs -cp [-f] [-p | -p[topax]] [-d] <hdfs源路径> ... <hdfs目标路径>
  • -f:如果目标位置已经存在同名文件或目录,则强制覆盖它。如果不使用此选项而目标位置已存在相同名称的文件或目录,那么命令将会失败。

  • -p:保留源文件或目录的属性,包括权限(permission)、拥有者(ownership)、时间戳(timestamp),以及扩展属性(extended attributes)。默认情况下,不指定任何参数时,只会保留权限、拥有者和时间戳。

  • -p[topax]:这是对 -p 选项的细化控制。您可以选择性地保留某些属性:

    • t:保留时间戳(timestamp)。
    • o:保留拥有者(ownership),前提是执行用户具有相应的权限。
    • p:保留权限(permission)。
    • x:保留扩展属性(extended attributes)。

    您可以根据需要组合这些字母来指定想要保留的属性。例如,-pt 将只保留权限和时间戳,而不保留拥有者信息或扩展属性。

  • -d:允许将非空目录复制到现有目录中。这意味着如果目标是一个现有的非空目录,源目录的内容将被复制到目标目录中,而不是替换目标目录。

8.2 示例

把hdfs上/test/demo1/f1_new.txt文件复制到/test/demo2目录下。

hdfs dfs -cp /test/demo1/f1_new.txt /test/demo2

把hdfs上/test/demo1/f1_new.txt文件复制到/test/demo2目录下,如果/test/demo2/f1_new.txt文件存在则强制覆盖。

hdfs dfs -cp -f /test/demo1/f1_new.txt /test/demo2

把hdfs上/test/demo1/f2.txt/test/demo1/f3.txt文件复制到/test/demo2目录下。

hdfs dfs -cp /test/demo1/f2.txt /test/demo1/f3.txt /test/demo2

9. 删除空目录

9.1 语法及解释

hdfs dfs -rmdir [--ignore-fail-on-non-empty] <hdfs目录路径> ...
  • --ignore-fail-on-non-empty:这是 hdfs dfs -rmdir 命令的一个可选参数。通常情况下,如果你尝试删除一个非空目录(即包含文件或子目录的目录),hdfs dfs -rmdir 将会失败并返回错误信息,因为它默认只允许删除空目录。但是,如果指定了 --ignore-fail-on-non-empty 参数,那么即使遇到非空目录,命令也不会报错,而是简单地不删除该目录,并继续处理命令行中指定的其他目录(如果有)。请注意,这并不意味着它会递归地删除目录内容;它只是忽略了删除非空目录时的失败。

9.2 示例

删除hdfs空目录/test/test03/demo02

hdfs dfs -rmdir /test/test03/demo02

删除多个hdfs目录时跳过不为空的目录。

hdfs dfs -rmdir --ignore-fail-on-non-empty /test/test03/demo03 /test/test02

10. 删除文件或目录

10.1 语法及解释

hdfs dfs -rm [-f] [-r|-R] [-skipTrash] [-safely] <hdfs文件或目录路径> ...
  • -f:如果目标文件不存在,忽略错误并继续执行。这在批量删除操作中有用,可以避免因为个别文件不存在而导致整个命令失败。

  • -r-R:递归删除目录及其所有内容(包括子目录和文件)。这两个选项是等价的,允许你删除非空目录。

  • -skipTrash:直接永久删除文件或目录,而不将它们移入回收站(trash)。默认情况下,HDFS 会把被删除的文件移动到一个临时的回收站目录中,在那里它们可以在一段时间内恢复。使用此选项后,文件将不会进入回收站而是立即被删除。

  • -safely:这个选项确保删除操作不会导致数据丢失。它会在尝试删除之前检查文件或目录是否可以安全地被删除。例如,它可能会检查是否有其他进程正在使用这些文件或目录。

10.2 示例

删除hdfs上的/test/test03/d.txt文件。

hdfs dfs -rm /test/test03/d.txt

删除hdfs上多个文件时,忽略不存在的文件。

hdfs dfs -rm -f /test/test03/d.txt /test/test02/demo1/f1_new.txt

递归删除目录/test/test03及其所有内容。

hdfs dfs -rm -r /test/test03

递归永久删除目录/test/test02及其所有内容。

hdfs dfs -rm -r -skipTrash /test/test02

安全地删除/test/demo3/demo/f1.txt文件。

hdfs dfs -rm -safely /test/demo3/demo/f1.txt

11. 移动本地文件到 HDFS

11.1 语法

hdfs dfs -moveFromLocal <Linux本地文件或目录路径> ... <hdfs目录路径>

11.2 示例

在hdfs创建/test/demo目录,并移动Linux本地/tmp/f1.txt文件到hdfs的/test/demo目录下。

hdfs dfs -mkdir /test/demo
hdfs dfs -moveFromLocal /tmp/f1.txt /test/demo

移动Linux本地/tmp/f2.txt/tmp/f3.txt文件到hdfs的/test/demo目录下。

hdfs dfs -moveFromLocal /tmp/f2.txt /tmp/f3.txt /test/demo

在Linux本地创建/tmp/test目录,并把/tmp/test目录移动到hdfs的/test/demo目录下。

mkdir -p /tmp/test
hdfs dfs -moveFromLocal /tmp/test /test/demo

12. 移动 HDFS 文件到本地

12.1 语法

hdfs dfs -moveToLocal <hdfs路径> <Linux本地路径>

12.2 示例

移动hdfs的/test/demo/f1.txt文件到Linux本地/tmp目录。

hdfs dfs -moveToLocal /test/demo/f1.txt /tmp

13. 搜索文件或目录

13.1 语法及解释

hdfs dfs -find <hdfs路径> ... <表达式> ...
  • <hdfs路径>:指定要查找的起始目录或文件。可以提供一个或多个路径作为查找的起点。
  • <表达式>:用于定义查找条件的表达式。表达式可以包含选项、测试和操作,它们决定了哪些文件或目录会被列出。

表达式

表达式是构建查找命令的核心部分,下面是一些常用的表达式及其含义:

  • -name pattern:根据文件名模式查找文件。pattern 可以包含通配符(如 *?)。
  • -iname pattern:与 -name 类似,但忽略大小写。
  • -size [+|-]n[b|k|m|g]:根据文件大小查找文件。+ 表示大于,- 表示小于;单位为字节 (b)、千字节 (k)、兆字节 (m) 或吉字节 (g)。
  • -type [f|d|l|...]:根据类型查找文件。f 表示普通文件,d 表示目录,l 表示符号链接等。
  • -mtime [+|-]n:根据修改时间查找文件。+n 表示在 n 天之前修改的文件,-n 表示在过去 n 天内修改的文件。
  • -atime [+|-]n:根据访问时间查找文件,规则同 -mtime
  • -exec <command>:对找到的每个文件执行给定的命令。{} 会替换为当前处理的文件路径,并且通常需要以 \; 结尾来标记命令结束。
  • -print:打印匹配的文件路径。这是默认行为,所以通常不需要显式指定。
  • -and, -or, -not:逻辑运算符,用于组合其他表达式。注意,在某些 Hadoop 版本中,这些逻辑运算符可能需要写成 -a, -o, ! 的形式。

13.2 示例

查找hdfs上/test目录下所有的f1.txt文件。

hdfs dfs -find /test -name f1.txt

在这里插入图片描述

查找hdfs上/test/user目录下所有的f1.txt文件。

hdfs dfs -find /test /user -name f1.txt

在这里插入图片描述

查找hdfs上跟目录下所有的demo1目录。

hdfs dfs -find / -name demo1

在这里插入图片描述

14. 创建空文件

14.1 语法

hdfs dfs -touchz <hdfs文件路径> ...

14.2 示例

在hdfs上创建空文件/test/test001.txt

hdfs dfs -touchz /test/test001.txt

15. 创建空文件或更新现有文件的时间戳

15.1 语法及解释

hdfs dfs -touch [-a] [-m] [-t TIMESTAMP ] [-c] <hdfs文件路径> ...
  • -a:仅更新访问时间(access time)。如果不提供具体的时间戳,默认使用当前时间。

  • -m:仅更新修改时间(modification time)。同样地,如果不提供具体的时间戳,默认使用当前时间。

  • -t TIMESTAMP:允许用户指定要设置的时间戳。TIMESTAMP 必须是一个格式为 [YYMMDDhhmm[.ss]] 的字符串。例如,202412201530.45 表示 2024 年 12 月 20 日下午 3 点 30 分 45 秒。这个时间戳可以与 -a-m 一起使用来精确控制访问或修改时间。

  • -c:当文件不存在时,不创建新文件。只有在文件已经存在的情况下才会更新时间戳。这与 Unix touch 命令的行为相匹配,其中 -c 选项防止创建新文件。

15.2 示例

在hdfs上创建空文件/test/test002.txt

hdfs dfs -touch /test/test002.txt

更新hdfs上/test/test002.txt文件的访问和修改时间到当前时间。

hdfs dfs -touch /test/test002.txt

更新hdfs上/test/test002.txt文件的访问时间为当前时间。

hdfs dfs -touch -a /test/test002.txt

更新hdfs上/test/test002.txt文件的修改时间为当前时间。

hdfs dfs -touch -m /test/test002.txt

16. 截断文件至指定长度

用于在 Hadoop 分布式文件系统 (HDFS) 中截断文件,即减少文件的大小到指定的长度。

16.1 语法及解释

hdfs dfs -truncate [-w] <长度> <hdfs文件路径> ...
  • <长度>:指定要将文件截断到的目标长度(以字节为单位)。如果提供的长度大于文件当前大小,则操作不会有任何效果;如果小于当前文件大小,文件将被截断至指定长度。

  • -w:等待(wait)选项。使用 -w 选项后,命令将会等待截断操作完成后再返回。如果不使用此选项,命令可能会立即返回,而实际的截断操作可能仍在后台进行。

  • 截断操作是不可逆的。一旦文件被截断,丢失的数据将无法恢复,请谨慎使用。

  • 如果提供的 <长度> 大于文件的实际大小,那么该命令不会对文件做任何改变。

16.2 示例

截断文件/test/hadoop-env.sh至长度8000B。

hdfs dfs -truncate 8000 /test/hadoop-env.sh

截断文件/test/hadoop-env_new.sh至长度8000B,并等待操作完成。

hdfs dfs -truncate -w 8000 /test/hadoop-env.sh

在这里插入图片描述

17. 统计文件或目录数量

统计文件的数量、目录数量、空间消耗等。

17.1 语法及解释

hdfs dfs -count [-q] [-h] [-v] [-t [<存储类型>]] [-u] [-x] [-e] <hdfs路径> ...
  • -q:显示配额(quota)信息。这包括目录树的命名空间配额(namespace quota)、存储空间配额(space quota),以及它们各自的使用情况。

  • -h:以人类可读的格式显示文件大小(例如 KB, MB, GB)。

  • -v:显示详细信息,包括每个目录的完整路径名、目录数量、文件数量、文件总字节数、副本总字节数(考虑了文件的复制因子)、压缩后字节数、已用配额百分比等。

  • -t [<存储类型>]:根据存储类型过滤结果,存储类型可以是 DISK, ARCHIVE, SSD 等。

  • -u:显示未完成(under construction)块的数量。这些是正在写入但尚未完成的块。

  • -x:显示超出配额的文件或目录。这有助于识别哪些路径超过了其命名空间或磁盘空间配额。

  • -e:显示额外的统计信息,如最小/最大文件大小、平均文件大小等。

17.2 示例

统计目录/test的目录、文件的数量及总字节数。

hdfs dfs -count /test

在这里插入图片描述

统计目录/test的目录、文件的数量及总字节数,并以人类可读的格式显示大小。

hdfs dfs -count -h /test

在这里插入图片描述

统计目录/test的目录、文件的数量及总字节数,以人类可读的格式显示大小,并显示详细信息。

hdfs dfs -count -h -v /test

在这里插入图片描述

统计目录/test的目录、文件的数量及总字节数,并显示详细的配额信息。

hdfs dfs -count -v -q /test

在这里插入图片描述

显示目录/test下超出配额的文件或目录。

hdfs dfs -count -x -v /test

在这里插入图片描述

18. 修改权限

18.1 语法及解释

hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> hdfs路径...

更改 Hadoop 分布式文件系统 (HDFS) 中文件或目录的权限。该命令允许用户设置文件或目录的读(read)、写(write)和执行(execute)权限,类似于 Unix/Linux 系统中的 chmod 命令。

  • -R:递归地更改指定目录及其所有子目录和文件的权限。如果不使用此选项,则只会更改指定文件或目录本身的权限。

  • <MODE[,MODE]...><OCTALMODE>:权限模式可以通过符号模式或八进制模式来指定。

符号模式 (<MODE[,MODE]...>)

符号模式允许你以更直观的方式修改权限,格式为 [ugoa][[+-=][rwx]],其中:

  • u 表示用户(文件的所有者)。
  • g 表示组(文件所属的组)。
  • o 表示其他(既不是所有者也不是组成员的用户)。
  • a 表示全部(等同于 ugo 的组合)。
  • + 表示添加权限。
  • - 表示移除权限。
  • = 表示设置权限(覆盖现有的权限)。
  • r 表示读取权限。
  • w 表示写入权限。
  • x 表示执行权限。

八进制模式 (<OCTALMODE>)

八进制模式是一种紧凑的方式来表示权限,通过三个八进制数字来分别设置用户、组和其他的权限。每个八进制数可以是0到7之间的值,对应不同的权限组合:

  • 4 表示读取权限(r)。
  • 2 表示写入权限(w)。
  • 1 表示执行权限(x)。
  • 数字相加可以得到多种权限组合,如 7(即 4+2+1)表示读取、写入和执行权限。

18.2 示例

给hdfs上文件/test/test001.txt增加权限为所有人可写。

hdfs dfs -chmod a+w /test/test001.txt

设置hdfs上文件/test/test001.txt的权限为文件所有者有读写权限,组和其他没有任何权限。

hdfs dfs -chmod 600 /test/test001.txt

hdfs dfs -chmod u=rw /test/test001.txt

递归的将目录/test/demo3的权限设置为所有者有读、写、执行权限,组和其他人有读、写权限。

hdfs dfs -chmod -R 766 /test/demo3

19. 修改所有者和组

19.1 语法及解释

hdfs dfs -chown [-R] [OWNER][:[GROUP]] hdfs路径...

hdfs dfs -chown 命令用于更改 Hadoop 分布式文件系统 (HDFS) 中文件或目录的所有者和组。这类似于 Unix/Linux 系统中的 chown 命令,允许用户指定新的所有者和/或组来管理文件或目录的访问权限。以下是该命令中提到的选项参数解释:

  • -R:递归地更改指定目录及其所有子目录和文件的所有者和/或组。

  • [OWNER][:[GROUP]]:指定新的所有者和/或组。这里有两种情况:

    • 如果只提供 OWNER,那么将仅更改文件或目录的所有者。
    • 如果提供 OWNER:GROUP,那么将同时更改所有者和组。如果只想更改组而不更改所有者,可以使用 :GROUP 的格式(即省略所有者部分)。

19.2 示例

修改文件/test/test001.txt的所有者为test

hdfs dfs -chown test /test/test001.txt

修改文件/test/test001.txt的组为testgroup

hdfs dfs -chown :testgroup /test/test001.txt

修改文件/test/test001.txt的所有者为newtest,组为newtestgroup

hdfs dfs -chown newtest:newtestgroup /test/test001.txt

修改目录/test/demo3的所有者为newtest01

hdfs dfs -chown newtest01 /test/demo3

递归的修改目录/test/demo3及其内容的所有者为newtest,组为newtestgroup

hdfs dfs -chown -R newtest:newtestgroup /test/demo3

20. 修改组

20.1 语法及解释

hdfs dfs -chgrp [-R] GROUP hdfs路径...

-R:递归地更改指定目录及其所有子目录和文件的组所有权。
GROUP:指定新的组名称。

20.2 示例

修改文件/test/test002.txt的所属组为newgroup

hdfs dfs -chgrp newgroup /test/test002.txt

递归的修改目录/test/demo3及其内容的所属组为newgroup

hdfs dfs -chgrp -R newgroup /test/demo3

21. 查看磁盘使用情况

21.1 语法及解释

hdfs dfs -du [-s] [-h] [-v] [-x] <hdfs路径> ...
  • -s:汇总(summarize)。仅显示每个指定路径的总大小,而不是列出每个单独的文件或子目录的大小。

  • -h:以人类可读的格式显示文件大小(例如 KB, MB, GB)。

  • -v:显示详细信息(verbose)。

  • -x:跨过不同文件系统挂载点(cross mount points)。在 HDFS 中,这个选项的意义可能有限,因为 HDFS 是单一命名空间,但如果你有联邦 HDFS 或者其他特殊情况,它可能会有作用。

21.2 示例

查看根目录下磁盘的使用情况。

hdfs dfs -du /

在这里插入图片描述

查看根目录下磁盘的使用情况,带有每一列(大小、所有副本消耗的磁盘空间、完整路径名称)的表头。

hdfs dfs -du -v /

在这里插入图片描述

查看根目录下磁盘的使用情况,带有每一列(大小、所有副本消耗的磁盘空间、完整路径名称)的表头,并以人类可读的格式显示大小。

hdfs dfs -du -v -h /

在这里插入图片描述

查看根目录的使用情况,带有每一列(大小、所有副本消耗的磁盘空间、完整路径名称)的表头,并以人类可读的格式显示大小。

hdfs dfs -du -v -h -s /

在这里插入图片描述

22. 查看磁盘空间使用情况

22.1 语法及解释

hdfs dfs -df [-h] [<hdfs路径> ...]
  • -h:以人类可读的格式显示文件大小(例如 KB, MB, GB)。

22.2 示例

查看HDFS磁盘空间使用情况(文件系统、大小、已使用空间、可用空间容量、已使用空间百分比)。

hdfs dfs -df

在这里插入图片描述

以人类可读的格式查看HDFS磁盘空间使用情况。

hdfs dfs -df -h

在这里插入图片描述

以人类可读的格式查看根目录/user目录和/test目录磁盘空间使用情况。

hdfs dfs -df -h / /user /test

在这里插入图片描述

22. 设置文件的副本数

22.1 语法及解释

hdfs dfs -setrep [-R] [-w] <副本数> <hdfs文件路径> ...
  • -R:递归地更改指定目录及其所有子目录和文件的复制因子。

  • -w:等待(wait)选项。使用 -w 选项后,命令将会等待复制操作完成后再返回。

22.2 示例

设置/test/test001.txt文件的副本数为3,并等待设置完成后再返回。

hdfs dfs -setrep -w 3 /test/test001.txt

递归的设置/test/demo3目录下的所有文件的副本数为3,并等待设置完成后再返回。

hdfs dfs -setrep -w -R 3 /test/demo3

23. 永久移除被删除的文件

23.1 语法及解释

hdfs dfs -expunge [-immediate] [-fs <path>]
  • [-immediate]:立即执行回收站的清空操作,而不等待默认的时间周期(通常是6小时)。使用此选项可以更快地释放磁盘空间。

  • [-fs <path>]:指定要操作的文件系统的 URI。这通常用于多命名节点环境或多集群环境中,以明确指出要清空哪个文件系统的回收站。如果未指定,则默认为当前配置的默认文件系统。

23.2 示例

清空hdfs的回收站。

hdfs dfs -expunge

立即清空hdfs的回收站。

hdfs dfs -expunge -immediate

清空指定文件系统的回收站。

hdfs dfs -expunge -immediate -fs hdfs://hadoop:9000

24. 测试路径是否存在或具有某些特性

24.1 语法及解释

hdfs dfs -test -[defswrz] <path>
  • -d:如果 <path> 是一个存在的目录,则返回 0。
  • -e:如果 <path> 存在(无论是文件还是目录),则返回 0。
  • -f:如果 <path> 是一个存在的普通文件,则返回 0。
  • -s:如果 <path> 是一个存在且大小不为零的文件,则返回 0。
  • -w:如果当前用户对 <path> 有写权限,则返回 0。
  • -r:如果当前用户对 <path> 有读权限,则返回 0。
  • -z:如果 <path> 是一个存在且大小为零的文件,则返回 0。

注意事项

  • hdfs dfs -test 命令本身不会产生任何输出;它只返回一个退出状态码。因此,在实际使用时,通常会结合 shell 的逻辑操作符(如 &&||)来执行进一步的操作。

24.2 示例

检查路径/test/demo3是否是目录。

hdfs dfs -test -d /test/demo3 && echo "是目录"

检查路径/test/demo3是否存在。

hdfs dfs -test -e /test/demo3 && echo "文件或目录存在"

检查路径/test/test001.txt是否是普通文件。

hdfs dfs -test -f /test/test001.txt && echo "是普通文件"

检查文件/test/test001.txt是否为空。

hdfs dfs -test -s /test/test001.txt && echo "文件不为空"

检查文件/test/test001.txt是否有写权限。

hdfs dfs -test -w /test/test001.txt && echo "有写权限"

检查文件/test/test001.txt是否有读权限。

hdfs dfs -test -r /test/test001.txt && echo "有读权限"

检查文件是否为空

hdfs dfs -test -z /test/test001.txt && echo "文件为空"

在这里插入图片描述

25. 以文本形式显示文件内容

25.1 语法及解释

hdfs dfs -text [-ignoreCrc] <hdfs文件路径> ...

-ignoreCrc:忽略 CRC(循环冗余校验)检查。CRC 检查是一种错误检测机制,用来确保数据在传输过程中没有被损坏。使用此选项时,即使文件的 CRC 校验不匹配也不会导致命令失败,而是继续尝试显示文件内容。这对于尝试查看可能已损坏但仍部分可读的文件特别有用。

25.2 示例

以文本形式显示/test/hadoop-env.sh文件内容。

hdfs dfs -text /test/hadoop-env.sh

26. 显示文件或目录的状态

26.1 语法及解释

hdfs dfs -stat [format] <hdfs路径> ...
  • [format]:可选参数,用于指定输出格式。
    格式说明符
  • %a:访问权限(例如 755644)。
  • %b:分配给文件的实际块数。
  • %d:设备编号(通常不适用于 HDFS)。
  • %g:组 ID。
  • %G:组名称。
  • %i:inode 编号(通常不适用于 HDFS)。
  • %m:挂载点(通常不适用于 HDFS)。
  • %n:文件名。
  • %N:带有符号链接的目标文件名。
  • %s:文件大小(以字节为单位)。
  • %t:文件类型(例如 - 表示普通文件,d 表示目录)。
  • %u:用户 ID。
  • %U:用户名。
  • %w:上次访问时间(以秒为单位,自纪元以来)。
  • %x:上次数据修改时间(以秒为单位,自纪元以来)。
  • %y:上次状态改变时间(以秒为单位,自纪元以来)。
  • %z:上次同步到磁盘的时间(以秒为单位,自纪元以来)。

26.2 示例

显示文件/test/demo3/f1.txt的状态。

hdfs dfs -stat "%a %b %d %g %n %u" /test/demo3/f1.txt

在这里插入图片描述

27. 合并多个文件并下载

27.1 语法及解释

hdfs dfs -getmerge [-nl] [-skip-empty-file] <hdfs目录路径> <Linux本地文件路径>

-nl:在每个文件内容之后添加一个换行符(newline)。这对于确保合并后的文件格式正确特别有用,特别是当源文件本身没有以换行符结尾时。
-skip-empty-file:跳过空文件,不将它们包含在合并结果中。这可以避免合并文件中出现不必要的空白部分。

27.2 示例

合并hdfs上目录/test/demo1下的所有文件并下载到Linux本地。

hdfs dfs -getmerge /test/demo1 /export/data/mergedfile.txt

合并hdfs上目录/test/demo1下的所有文件并下载到Linux本地,在每个文件后添加换行符,并跳过空文件。

hdfs dfs -getmerge -nl -skip-empty-file /test/demo1 /export/data/mergedfile.txt

28. 创建快照

28.1 语法

hdfs dfs -createSnapshot <快照目录> [<快照名称>]

28.2 示例

创建保存快照的目录,启用快照功能,并创建默认名称的快照。

hdfs dfs -mkdir /snapshot
hdfs dfsadmin -allowSnapshot /snapshot
hdfs dfs -createSnapshot /snapshot

创建快照并指定名称为my_snapshot_202412220025

hdfs dfs -createSnapshot /snapshot my_snapshot_202412220025

29. 重命名快照

29.1 语法

hdfs dfs -renameSnapshot <快照目录> <旧快照名称> <新快照名称>

29.2 示例

hdfs dfs -renameSnapshot /snapshot my_snapshot_202412220025 new_my_snapshot_202412220025

30. 删除快照

30.1 语法

hdfs dfs -deleteSnapshot <快照目录> <快照名称>

30.2 示例

hdfs dfs -deleteSnapshot /snapshot new_my_snapshot_202412220025

31. 打印文件的校验和信息

31.1 语法

hdfs dfs -checksum [-v] <src> ...

-v:详细模式(verbose)。使用此选项时,命令不仅会显示每个文件的校验和信息,还会提供额外的细节,如算法类型、块大小等。

31.2 示例

打印文件/test/test001.txt的校验和信息。

hdfs dfs -checksum /test/test001.txt

在这里插入图片描述

打印多个文件的校验和信息。

hdfs dfs -checksum /test/test001.txt /test/test002.txt /test/demo1/f2.txt

在这里插入图片描述

打印多个文件的校验和信息,并显示块大小。

hdfs dfs -checksum -v /test/test001.txt /test/test002.txt /test/demo1/f2.txt

在这里插入图片描述

32. 获取访问控制列表(ACL)

32.1 语法

hdfs dfs -getfacl [-R] <hdfs路径>
  • -R:递归地显示指定目录及其所有子目录和文件的 ACL 信息。

32.2 示例

查看文件/test/test001.txt的 ACL 信息。

hdfs dfs -getfacl /test/test001.txt

在这里插入图片描述

查看目录/test/demo3的 ACL 信息。

hdfs dfs -getfacl /test/demo3

在这里插入图片描述

递归的查看目录/test/demo3及其内容的 ACL 信息。

hdfs dfs -getfacl -R /test/demo3

在这里插入图片描述

33. 设置 ACL

33.1 语法

hdfs dfs -setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]
  • -R:递归地应用 ACL 设置到指定目录及其所有子目录和文件。如果不使用此选项,则只会更改指定文件或目录本身的 ACL。

  • {-b|-k}

    • -b:移除所有扩展 ACL 条目,并清除默认 ACL。
    • -k:仅移除默认 ACL。
  • {-m|-x <acl_spec>}

    • -m:修改 ACL,添加新的条目或更新现有条目。
    • -x:删除指定的 ACL 条目。
  • <acl_spec>:ACL 规格字符串,定义要设置或修改的具体 ACL 条目。格式如下:

    • 用户条目:user[:<username>]:<permissions>
    • 组条目:group[:<groupname>]:<permissions>
    • 其他条目:other::<permissions>
    • 默认用户条目:default:user[:<username>]:<permissions>
    • 默认组条目:default:group[:<groupname>]:<permissions>
    • 默认其他条目:default:other::<permissions>

    其中 <permissions> 可以是 r(读)、w(写)、x(执行)以及它们的组合,如 rwxr-x

  • --set <acl_spec>:完全替换现有的 ACL 列表(包括默认 ACL),并设置新的 ACL。这会覆盖所有的现有条目。

34. 设置扩展属性

扩展属性允许你为文件或目录附加额外的元数据,这对于存储和检索与文件内容无关的信息非常有用。

34.1 语法

hdfs dfs -setfattr {-n name [-v value] | -x name} <hdfs路径>
  • {-n name [-v value] | -x name}
    • -n name:指定要创建或修改的扩展属性名称。
      • [-v value]:指定要设置的扩展属性值。如果省略此选项,则会将该扩展属性的值设置为空。
    • -x name:指定要删除的扩展属性名称。

34.2 示例

给文件/test/test001.txt设置扩展属性。

hdfs dfs -setfattr -n user.comment -v "This is a comment" /test/test001.txt

给文件/test/test001.txt设置没有值的扩展属性。

hdfs dfs -setfattr -n user.flag /test/test001.txt

删除文件/test/test001.txt的特定扩展属性。

hdfs dfs -setfattr -x user.flag /test/test001.txt

35. 获取扩展属性

35.1 语法

hdfs dfs -getfattr [-R] {-n name | -d} [-e en] <hdfs路径>
  • -R:递归地显示指定目录及其所有子目录和文件的扩展属性信息。如果不使用此选项,则只会显示指定文件或目录本身的扩展属性信息。

  • {-n name | -d}

    • -n name:指定要获取的扩展属性名称。你可以通过这个选项来获取特定名称的扩展属性值。
    • -d:显示所有默认扩展属性。这将列出文件或目录上设置的所有扩展属性及其值。
  • [-e en]:指定编码方式。如果扩展属性的值不是简单的文本字符串,可以使用此选项来指定如何解码这些值。常见的编码方式包括:

    • text:以文本格式显示。
    • hex:以十六进制格式显示。
    • base64:以 Base64 编码格式显示。

35.2 示例

获取文件文件/test/test001.txt的特定扩展属性。

hdfs dfs -getfattr -n user.comment /test/test001.txt

在这里插入图片描述

递归地获取/test/demo3目录及其内容的所有扩展属性。

hdfs dfs -getfattr -R -d /test/demo3

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMagician

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值