HDFS 快照(HDFS Snapshots)是文件系统在某个时间点的只读副本。可以在文件系统的子树或整个文件系统上创建快照。快照的常见用途主要包括数据备份,防止用户误操作和容灾恢复。
HDFS 快照的实现非常高效:
- 快照的创建非常迅速:除去 inode 的查找时间,时间复杂度为 O(1);
- 仅在对快照进行修改时,才会消耗一些内存:内存使用 O(M),M 是被修改的文件或目录数;
- Datanode 上的 block 是不会被复制的:快照文件记录 block 的列表和文件大小,并不做数据的拷贝;
- 快照不会对常规的 HDFS 操作产生负面影响:所有的修改都按照时间倒序排序,以便可以直接访问当前数据。快照数据是从当前数据中减去修改的数据来计算的。
基本语法
功能 | 描述 |
---|---|
hdfs dfsadmin -allowSnapshot 路径 | 开启指定目录的快照功能 |
hdfs dfsadmin -disallowSnapshot 路径 | 禁用指定目录的快照功能,默 认是禁用 |
hdfs dfs -createSnapshot 路径 | 对目录创建快照 |
hdfs dfs -createSnapshot 路径 名称 | 指定名称创建快照 |
hdfs dfs -renameSnapshot 路径 旧名称 新名称 | 重命名快照 |
hdfs lsSnapshottableDir | 列出当前用户所有可快照目录 |
hdfs snapshotDiff 路径 1 路径 2 | 比较两个快照目录的不同之处 |
hdfs dfs -deleteSnapshot
| 删除快照 |
开启指定目录的快照功能
[root@hadoop101 hadoop-2.7.2]# hdfs dfsadmin -allowSnapshot /ylj/demo
Allowing snaphot on /ylj/demo succeeded
创建快照
[root@hadoop101 hadoop-2.7.2]# hdfs dfs -createSnapshot /ylj/demo
Created snapshot /ylj/demo/.snapshot/s20190401-030142.009
从web ui上看不到文件夹.snapshot
可以直接访问
差异比较
[root@hadoop101 hadoop-2.7.2]# hdfs snapshotDiff /ylj/demo . .snapshot/s20190401-030142.009
Difference between current directory and snapshot s20190401-030142.009 under directory /ylj/demo:
[root@hadoop101 hadoop-2.7.2]# hdfs dfs -put /root/tmp/1.jpg /ylj/demo/4.jpg
[root@hadoop101 hadoop-2.7.2]# hdfs snapshotDiff /ylj/demo . .snapshot/s20190401-030142.009
Difference between current directory and snapshot s20190401-030142.009 under directory /ylj/demo:
M .
- ./4.jpg
恢复快照
hdfs dfs -cp /ylj/demo/.snapshot/s20190401-030142.009/* /ylj/demo/