0%

HDFS基本命令

HDFS常用命令全解析

HDFS(Hadoop Distributed File System)作为 Hadoop 生态的核心分布式存储系统,其命令操作与 Linux Shell 命令高度相似,仅需添加 hadoop fshdfs dfs 前缀即可使用。其中 dfsfs 的具体实现,实际使用中两者功能基本一致。本文将详细解析 HDFS 的核心操作命令,帮助读者快速掌握 HDFS 的日常管理与使用。

基础语法与通用选项

HDFS 命令的基本语法格式为:

1
2
3
hdfs dfs [通用选项] [命令] [命令参数]
#
hadoop fs [通用选项] [命令] [命令参数]

常用通用选项

  • -conf <配置文件>:指定应用程序配置文件
  • -D <property=value>:定义配置属性值
  • -fs <文件系统>:指定默认文件系统(如 hdfs://namenode:portfile:///
  • -jt <资源管理器>:指定 ResourceManager 地址

帮助命令

通过帮助命令可快速查询其他命令的用法,是学习 HDFS 命令的重要工具:

1
2
3
4
5
# 查看所有命令的帮助摘要
hdfs dfs -help

# 查看特定命令的详细用法(以 cat 为例)
hdfs dfs -help cat

执行后会显示命令的参数说明和功能描述,例如 hdfs dfs -help cat 会输出:

1
2
3
4
# 会列出来该命令的参数以及作用
-cat [-ignoreCrc] <src> ... :
Fetch all files that match the file pattern <src> and display their content on
stdout.

查询类命令

列出目录内容(ls)

功能:类似 Linux 的 ls 命令,用于查看 HDFS 中的文件和目录信息。

1
2
3
4
5
6
7
8
9
10
11
12
13

#语法1 hdfs dfs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
#语法2 hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
# ls -R 表示查看目录以及子目录
# 常用示例
- 查看根目录内容:
hdfs dfs -ls /

- 递归查看目录及其子目录:
hdfs dfs -ls -R /testHdfs

- 以人类可读格式显示(KB/MB/GB):
hdfs dfs -ls -h /testHdfs

参数说明

  • -R:递归列出所有子目录内容
  • -h:以人类可读的单位显示文件大小
  • -t:按修改时间排序(最新在前)
  • -S:按文件大小排序
  • -d:仅显示目录本身,不显示内容

查看文件内容(cat)

功能:读取 HDFS 中的文件内容并输出到控制台。

1
2
3
4
5
6
7
#语法1 hdfs dfs -cat [-ignoreCrc] URI [URI ...]
#语法2 hadoop fs -cat [-ignoreCrc] URI [URI ...]
# 示例
hdfs dfs -cat /testHdfs/logs/app.log

# 忽略 CRC 校验错误(用于读取可能损坏的文件)
hdfs dfs -cat -ignoreCrc /testHdfs/corrupted_file.txt

查看文件末尾(tail)

功能:类似 Linux 的 tail 命令,显示文件的最后 1KB 内容,支持实时跟踪。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -tail [-f] URI
#语法2 hadoop fs -tail [-f] URI
# 示例
- 查看文件末尾内容:
hdfs dfs -tail /testHdfs/logs/app.log

- 实时跟踪文件新增内容(类似 tail -f):
hdfs dfs -tail -f /testHdfs/logs/app.log

统计目录 / 文件大小(du)

功能:计算指定路径的磁盘使用情况。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -du [-s] [-h] [-v] [-x] URI [URI ...]
#语法2 hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
# 示例
- 统计目录下各文件大小:
hdfs dfs -du /testHdfs/data

- 以人类可读格式统计总大小(-s 表示汇总):
hdfs dfs -du -s -h /testHdfs

参数说明

  • -s:仅显示总大小,不列出每个文件的大小
  • -h:以人类可读单位显示(KB/MB/GB)
  • -x:排除快照目录的大小统计

查看文件系统磁盘使用情况(df)

功能:类似 Linux 的 df 命令,显示文件系统的总空间、已用空间和可用空间。

1
2
3
4
5
# 基础语法
hdfs dfs -df [-h] [<path> ...]

# 示例
hdfs dfs -df -h / # 以人类可读格式显示根目录所在文件系统的磁盘信息

目录操作命令

创建目录(mkdir)

功能:在 HDFS 中创建目录,支持递归创建多级目录。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -mkdir [-p] <paths>
#语法2 hadoop fs -mkdir [-p] <paths>
# 示例
- 创建单级目录:
hdfs dfs -mkdir /testHdfs

- 递归创建多级目录(父目录不存在时自动创建):
hdfs dfs -mkdir -p /testHdfs/tmp/logs

参数说明

  • -p:递归创建目录,若目录已存在则不报错

删除空目录(rmdir)

功能:删除 HDFS 中的空目录,若目录非空则删除失败。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
#语法2 hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
# 示例
- 删除空目录:
hdfs dfs -rmdir /testHdfs/empty_dir

- 忽略非空目录的删除失败错误:
hdfs dfs -rmdir --ignore-fail-on-non-empty /testHdfs/non_empty_dir

文件操作命令

上传文件到 HDFS

剪切本地文件到 HDFS(moveFromLocal)

功能:将本地文件剪切到 HDFS,操作后本地文件会被删除。

1
2
3
4
#语法1 hdfs dfs -moveFromLocal <localsrc> <dst>
#语法2 hadoop fs -moveFromLocal <localsrc> <dst>
# 示例
hdfs dfs -moveFromLocal ./temp.log /testHdfs/logs/ # 剪切本地 temp.log 到 HDFS

这里注意一下,这个操作是剪切操作,操作之后本地的文件就不存在了

复制本地文件到 HDFS(copyFromLocal/put)
  • copyFromLocal:从本地文件系统复制文件到 HDFS,源路径必须是本地文件
  • put:功能与 copyFromLocal 类似,支持从标准输入(-)读取数据
1
2
3
4
5
6
7
8
9
10
11
12
#语法1 hdfs dfs -copyFromLocal <localsrc> URI
#语法2 hadoop fs -copyFromLocal <localsrc> URI

# 示例
- 复制本地文件到 HDFS:
hdfs dfs -copyFromLocal ./local_data.txt /testHdfs/data/

- 覆盖已存在文件(-f)并保留文件属性(-p):
hdfs dfs -put -f -p ./config.ini /testHdfs/conf/

- 从标准输入读取数据并写入 HDFS 文件:
echo "hello hdfs" | hdfs dfs -put - /testHdfs/hello.txt

参数说明

  • -f:若目标文件已存在则覆盖
  • -p:保留源文件的属性(权限、时间戳等)

从 HDFS 下载文件

复制 HDFS 文件到本地(copyToLocal/get)
  • copyToLocal:从 HDFS 复制文件到本地文件系统
  • get:功能与 copyToLocal 完全一致,是更常用的别名
1
2
3
4
5
6
7
8
#语法1 hdfs dfs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
#语法2 hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
# 示例
- 下载 HDFS 文件到本地:
hdfs dfs -get /testHdfs/data/result.txt ./local_result.txt

- 覆盖本地已存在文件并保留属性:
hdfs dfs -get -f -p /testHdfs/conf/config.ini ./
合并下载多个文件(getmerge)

功能:将 HDFS 目录下的多个文件合并为一个本地文件,常用于小文件合并。

1
2
3
4
5
6
7
8
9
10
11
#语法1 hdfs dfs -getmerge [-nl] <src> <localdst>
#语法2 hadoop fs -getmerge [-nl] <src> <localdst>

# 示例
- 合并 HDFS 目录下的所有文件到本地:
hdfs dfs -getmerge /testHdfs/splits/ ./merged_file.txt
- 多个文件合并
hdfs dfs -getmerge /testHdfs/tmp/test.xml /testHdfs/tmp/test1.xml ./merge.xml

- 合并时添加换行符分隔(-nl)并跳过空文件:
hdfs dfs -getmerge -nl -skip-empty-file /testHdfs/logs/ ./all_logs.txt

HDFS 内部文件操作

追加内容到文件(appendToFile)

功能:将本地文件内容追加到 HDFS 已存在的文件末尾(HDFS 早期版本不支持文件修改,此命令提供有限的追加能力)。

1
2
3
4
5
#语法1 hdfs dfs -appendToFile <localsrc> ... <dst>
#语法2 hadoop fs -appendToFile <localsrc> ... <dst>
# 示例
- 追加本地文件到 HDFS 文件:
hdfs dfs -appendToFile ./new_logs.txt /testHdfs/logs/app.log
复制 HDFS 文件(cp)

功能:在 HDFS 内部复制文件或目录到目标路径。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
#语法2 hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
# 示例
- 复制文件到目标目录:
hdfs dfs -cp /testHdfs/data/file1.txt /testHdfs/backup/

- 覆盖目标文件并保留属性:
hdfs dfs -cp -f -p /testHdfs/conf/config.ini /testHdfs/conf/config_bak.ini
移动 HDFS 文件(mv)

功能:在 HDFS 内部移动文件或目录,可用于重命名文件。

1
2
3
4
5
6
7
8
#语法1 hdfs dfs -mv URI [URI ...] <dest>
#语法2 hadoop fs -mv URI [URI ...] <dest>
# 示例
- 移动文件到目标目录:
hdfs dfs -mv /testHdfs/temp/file.txt /testHdfs/data/

- 重命名文件:
hdfs dfs -mv /testHdfs/old_name.txt /testHdfs/new_name.txt
删除 HDFS 文件 / 目录(rm)

功能:删除 HDFS 中的文件或目录,支持递归删除。

1
2
3
4
5
6
7
8
9
10
11
#语法1 hdfs dfs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
#语法2 hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
# 示例
- 删除文件:
hdfs dfs -rm /testHdfs/tmp/merge.xml

# -r删除目录以及目录下的文件
hdfs dfs -rm -r /testHdfs/tmp

# 清空回收站 -skipTrash是直接永久删除,不经过回收站(否则会形成无限循环)
hdfs dfs -rm -r -skipTrash /user/<用户名>/.Trash/*

参数说明

  • -f:强制删除,无提示
  • -r/-R:递归删除目录及其内容
  • -skipTrash:直接永久删除,不经过回收站(默认会放入回收站)

文件属性与权限操作

修改文件权限(chmod)

功能:类似 Linux 的 chmod,修改 HDFS 文件或目录的权限。

1
2
3
4
5
6
7
8
9
# 基础语法
hdfs dfs -chmod [-R] <权限模式> <HDFS路径> ...

# 示例
- 为文件设置读写权限:
hdfs dfs -chmod 644 /testHdfs/data/file.txt

- 递归修改目录及内容的权限:
hdfs dfs -chmod -R 755 /testHdfs/app/
修改文件所有者(chown)

功能:修改 HDFS 文件或目录的所有者和所属组。

1
2
3
4
5
6
7
8
9
# 基础语法
hdfs dfs -chown [-R] [所有者][:[所属组]] <HDFS路径> ...

# 示例
- 修改所有者:
hdfs dfs -chown hadoopuser /testHdfs/data/

- 递归修改所有者和所属组:
hdfs dfs -chown -R hadoopuser:hadoopgroup /testHdfs/app/
修改文件副本数(setrep)

功能:设置 HDFS 文件的副本数量(默认副本数由 dfs.replication 配置)。

1
2
3
4
5
6
7
8
9
# 基础语法
hdfs dfs -setrep [-R] [-w] <副本数> <HDFS路径> ...

# 示例
- 为文件设置副本数为 3:
hdfs dfs -setrep 3 /testHdfs/important_data.txt

- 递归设置目录下所有文件的副本数并等待完成:
hdfs dfs -setrep -R -w 2 /testHdfs/dataset/

参数说明

  • -R:递归设置目录下所有文件
  • -w:等待副本数调整完成后返回

快照管理命令

HDFS 支持为目录创建快照(Snapshot),用于数据备份和恢复。

创建快照(createSnapshot)

1
2
3
4
5
# 基础语法
hdfs dfs -createSnapshot <快照目录> [<快照名称>]

# 示例
hdfs dfs -createSnapshot /testHdfs backup_20240723 # 为目录创建指定名称的快照

删除快照(deleteSnapshot)

1
2
3
4
5
# 基础语法
hdfs dfs -deleteSnapshot <快照目录> <快照名称>

# 示例
hdfs dfs -deleteSnapshot /testHdfs backup_20240723 # 删除指定快照

回收站操作

HDFS 有回收站(Trash)机制,删除的文件默认会保留在回收站(/user/<用户名>/.Trash)一段时间,可通过以下命令管理:

1
2
3
4
5
6
7
8
# 查看回收站内容
hdfs dfs -ls /user/<用户名>/.Trash/

# 永久删除回收站内容(清空回收站)
hdfs dfs -rm -r -skipTrash /user/<用户名>/.Trash/*

# 立即清理回收站(通常由系统自动执行,此命令强制触发)
hdfs dfs -expunge

欢迎关注我的其它发布渠道

表情 | 预览
快来做第一个评论的人吧~
Powered By Valine
v1.3.10