目录上的多个快照

Multiple Snapshots on a directory

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

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

    hdfs dfs -du -s -h 路径

    12.4T 76.8T路径

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

    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 的尺寸?

提前致谢!

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

提醒一下为什么 snapshots 会随着时间变大:

The implementation of HDFS Snapshots is efficient:

Snapshot creation is instantaneous: the cost is O(1) excluding the inode lookup time. Additional memory is used only when modifications are made relative to a snapshot: memory usage is O(M), where M is the number of modified files/directories. Blocks in datanodes are not copied: the snapshot files record the block list and the file size. There is no data copying. Snapshots do not adversely affect regular HDFS operations: modifications are recorded in reverse chronological order so that the current data can be accessed directly. The snapshot data is computed by subtracting the modifications from the current data.

HDFS 无法查看 space 特定快照的使用量。一般来说,最旧的快照将使用最多 space,但这取决于您何时删除和重新加载数据。删除数据时,不会删除快照涵盖的任何数据。从你的 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 中看到,它只是告诉你在捕获快照时快照中的文件使用了多少space。其中一些 space 将在所有快照甚至实时文件系统之间共享,因此您不知道哪个快照用得最多 space.

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

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