HDFS 快照管理
1.快照概念
原则:只做差异的记录;对于大多数不变的数据,是当前物理路径所指的内容,发生变更的INode数据会被额外的拷贝。
2.HDFS 中的快照相关命令
hadoop fs
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
[-renameSnapshot <snapshotDir> <oldName> <newName>]
hdfs fs
snapshotDiff diff two snapshots of a directory or diff the current directory contents with a snapshot
lsSnapshottableDir list all snapshottable dirs owned by the current user
Use -help to see options
命令中的两个概念:快照目录,具体快照。
3.HDFS 内部的快照管理机制
1.快照结构关系
图 快照结构图
2.快照调用流程
图 快照调用流程
3.快照原理实现分析
两个关注点:
A.快照如何生成,如何做到目录结构和原目录结构完全一致。
B.快照之间是如何比较出差异的。
关注点A:
从SnapshotManager#createSnapshot()方法的源码分析。
HDFS 中只为每个快照保存相对当时快照创建时间点发生过变更的 INode 信息,只是“存不同”。
获取快照信息时,根据快照 Id 和当前没发生过变更的 INode 信息 进行对应恢复。
关注点B:
从SnapshotManager#diff()方法的源码分析。
生成 SnapshotDifflnfo 对象,此对象里面包 了源 、目标快照间发生变更 文件目录信息。
根据发生变更的文件目录信息生 diff 报告。这里有两点:SnapshotDifflnfo 对象的构造产生 和 SnapshotDifflnfo 的报告生成。
SnapshotDifflnfo类中维护了3大类信息:
所有被修改过的文件/目录,不包括新建和删除操作。
所有目录下的被创建和删除的子文件。
所有被重命名过的文件/目录信息。
SnapshotDifflnfo 的报告生成:
SnapshotDifflnfo#generateReport()方法.
注意:
- 在创建快照目录前,需要对目标目录执行allowSnapshot操作。
- 原则:不允许创建出网状关系的快照目录(子目录不能为快照目录)
5.HDFS 的快照使用
丢失数据的恢复
元数据的差异比较