菜鸟科技网

Hadoop du命令如何精确计算HDFS目录实际占用空间?为什么显示大小与磁盘存储量存在差异?

du 命令是 "disk usage"(磁盘使用情况)的缩写,在 Hadoop 生态系统中,它是一个非常基础且重要的命令,用于查看 HDFS 文件或目录所占用的空间大小。

Hadoop du命令如何精确计算HDFS目录实际占用空间?为什么显示大小与磁盘存储量存在差异?-图1
(图片来源网络,侵删)

hadoop fs -du 命令用于显示 HDFS 上文件或目录的大小及其下所有文件的总大小,它可以帮助你了解集群中数据的存储分布情况,是排查磁盘空间问题和进行数据管理的重要工具。

基本语法:

hadoop fs -du [-s] [-h] [-v] <paths>

核心选项

下面是 du 命令最常用和最重要的几个选项:

选项 全称 描述 示例
-s --summarize 汇总显示,只计算每个指定路径的总大小,而不显示其下子目录的详细信息。 hadoop fs - -s /data
-h --human-readable 人性化显示,将字节大小转换为更易读的单位(如 KB, MB, GB, TB)。强烈推荐使用此选项 hadoop fs -du -h /data
-v --verbose 显示详细信息,除了文件大小外,还会显示文件的路径、副本数、块大小等信息。 hadoop fs -du -v /data
-x --exclude 排除匹配指定模式的文件或目录。 hadoop fs -du -x "*.log" /data

注意: 如果你使用的是 Hadoop 3.x 版本,命令可能直接是 hadoop du,而不是 hadoop fs -du,但其功能和选项基本一致。

Hadoop du命令如何精确计算HDFS目录实际占用空间?为什么显示大小与磁盘存储量存在差异?-图2
(图片来源网络,侵删)

常用示例

假设我们的 HDFS /user/hadoop 目录结构如下:

/user/hadoop/
├── file1.txt (100 bytes)
├── dir1/
│   ├── file2.txt (500 bytes)
│   └── file3.txt (200 bytes)
└── dir2/
    └── file4.txt (1500 bytes)

示例 1:基本用法(不使用任何选项)

直接查看 /user/hadoop 目录,会递归显示其下所有文件的大小。

hadoop fs -du /user/hadoop

输出:

100  /user/hadoop/file1.txt
500  /user/hadoop/dir1/file2.txt
200  /user/hadoop/dir1/file3.txt
1500 /user/hadoop/dir2/file4.txt
  • 第一列:文件的大小(以字节为单位)。
  • 第二列:文件的大小乘以它的副本数,默认副本数是 3,file1.txt 的大小是 100 * 3 = 300,但这里显示的是原始大小。注意:在较新版本的 Hadoop 中,第二列的含义有所变化,通常直接显示文件原始大小,而不是副本大小,最准确的理解是:第一列是文件大小,第二列是占用的磁盘空间(考虑副本和块大小)。
  • 第三列:文件的完整 HDFS 路径。

示例 2:使用 -s 选项进行汇总

如果我们只想知道 /user/hadoop 目录的总大小,而不关心内部结构。

Hadoop du命令如何精确计算HDFS目录实际占用空间?为什么显示大小与磁盘存储量存在差异?-图3
(图片来源网络,侵删)
hadoop fs -du -s /user/hadoop

输出:

2300  /user/hadoop
  • 这表示 /user/hadoop 目录及其所有子文件总共占用了 2300 字节的空间(原始数据大小)。

示例 3:结合 -s-h 选项(最常用)

这是最实用的用法,既能汇总大小,又能以人性化的方式显示。

hadoop fs -du -sh /user/hadoop

输出:

3K  /user/hadoop
  • 3K 表示 2.3 KB,比 2300 直观得多。

示例 4:查看多个目录

可以一次性查看多个不同目录的大小。

hadoop fs -du -sh /user/hadoop/dir1 /user/hadoop/dir2

输出:

700  /user/hadoop/dir1
1.5K /user/hadoop/dir2

示例 5:查看整个用户目录

查看 /user 目录下所有用户目录的总大小。

hadoop fs -du -sh /user/*

输出:

0K  /user/hadoop
1.2M  /user/hive
50M   /user/spark
  • 是一个通配符,代表 /user 下的所有直接子项。

示例 6:使用 -v 选项查看详细信息

这个选项可以提供更丰富的元数据信息。

hadoop fs -du -v /user/hadoop/file1.txt

输出(示例):

File Size: 100
Replication: 3
Block Size: 128MB
Storage Policy: HOT
Path: /user/hadoop/file1.txt
Disk Space: 300 (considering replication)
  • 输出会明确告诉你文件大小、副本数、块大小等信息,非常有助于深入分析。

与 Linux du 命令的对比

特性 Hadoop fs -du Linux du
作用范围 Hadoop 分布式文件系统 本地文件系统
大小计算 默认显示文件原始大小,第二列可能与副本和块大小有关 默认显示文件占用的磁盘空间(考虑块分配)
核心选项 -s (汇总), -h (人性化), -v (详细) -s (汇总), -h (人性化), -a (显示所有文件), --max-depth (控制递归深度)
性能 在集群上执行,可能需要跨节点汇总数据,速度相对较慢 在本地执行,速度非常快

  • hadoop fs -du 是检查 HDFS 磁盘使用情况的核心命令。
  • -sh 是最常用的组合,用于快速、人性化地查看目录总大小。
  • 它的输出可以帮助你:
    • 识别大文件/大目录:找出占用空间最多的数据,为数据清理或归档提供依据。
    • 监控数据增长:定期查看目录大小,了解数据增长趋势。
    • 排查空间问题:当 HDFS 空间不足时,用 du 命令定位是哪些目录或用户占用了过多空间。
    • 数据管理:了解数据分布,辅助进行数据分区、分桶等优化操作。

熟练掌握 hadoop fs -du 命令,对于任何 Hadoop 开发者、管理员或数据分析师来说都是必备技能。

分享:
扫描分享到社交APP
上一篇
下一篇