目录上的多个快照

Posted

技术标签:

【中文标题】目录上的多个快照【英文标题】:Multiple Snapshots on a directory 【发布时间】:2022-01-13 15:34:38 【问题描述】:

我们在 Cloudera 中有一个集群。我们使用 HDFS 的快照进行备份。最近我们看到 HDFS 中使用的空间一直在显着增长。我们怀疑这是因为我们用于备份的快照。

    当我们尝试查看目录的大小时,我们会看到以下内容:

    hdfs dfs -du -s -h 路径

    12.4 T 76.8 T 路径

    当我们尝试查看这个目录的大小时,我们看到了完全不同的东西:

    hdfs dfs -du -h -s -x

    12.4 吨 37.2 吨

我们还尝试查看此快照的大小。尺寸如下:

hdfs dfs -du -s -h <path>/.snapshot
9.1 T  63.6 T <path>/.snapshot/snap-new
10.9 T  68.0 T <path>/.snapthot/snap-old
12.4 T  37.2 T <path>/.snapshot/snap-of-today

我的问题是,如果我删除所有这些快照(snap-new、snap-old、snap-of-today),我们将开始看到类似数字 2 的大小?

如果没有,我要怎么做才能开始看到类似数字 2 的大小?

提前致谢!

【问题讨论】:

【参考方案1】:

如果您删除快照,您将使用更少的内存。

提醒一下为什么snapshots会随着时间的推移变得更大:

HDFS Snapshots的实现高效:

快照创建是即时的:成本是 O(1),不包括 inode 查找时间。 仅在修改时使用附加内存 与快照相关:内存使用量为 O(M),其中 M 是 修改的文件/目录的数量。数据节点中的块不是 复制:快照文件记录块列表和文件大小。 没有数据复制。快照不会对常规产生不利影响 HDFS 操作:修改按时间倒序记录 order 以便可以直接访问当前数据。快照 数据是通过从当前减去修改来计算的 数据。

【讨论】:

【参考方案2】:

HDFS 无法查看特定快照使用了多少空间。通常,最旧的快照将使用最多的空间,但这取决于您何时删除和重新加载数据。当您删除数据时,快照所涵盖的任何数据都不会被删除。从你的 du 输出:

12.4 T 76.8 T path

注意 3 x 12.4 = 37.2。因此,您的所有快照都使用 76.8 - 37.2 = 39.6 T,超过了使用 37.2T 的实时文件系统。 -x 开关不包括快照数据,并且在实时文件系统中也显示 37.2T。

您可以通过在快照目录上运行 du 看到,它只是告诉您在捕获快照时快照中的文件使用了多少空间。其中一些空间将在所有快照甚至实时文件系统之间共享,因此您不知道哪个快照占用的空间最多。

如果您删除快照,从最旧的开始,空间使用量应该会减少。

如果您的集群有频繁删除和重新创建大量数据的工作负载,快照将大大增加您对集群的空间需求。

【讨论】:

以上是关于目录上的多个快照的主要内容,如果未能解决你的问题,请参考以下文章

可以在系统上安装多个版本的快照吗?

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?

是否有一种解决方案允许从猫鼬中完全相同的快照中读取多个集合?

将多个文件从一个目录移动到远程 sftp 服务器上的另一个目录

LVM逻辑卷_学习笔记

Hadoop多个集群之间的数据拷贝hdfs快照管理hdfs回收站管理