目录上的多个快照
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 将快照划分为多个片段,以便让用户与每个片段进行交互?
是否有一种解决方案允许从猫鼬中完全相同的快照中读取多个集合?