HDFS Snapshotsnode
1. 概述并发
1.2 快照路径orm
3. 快照操做it
3.1 管理操做io
3.2 用户操做table
HDFS快照是只读的,一个时间点文件系统的一个副本。快照能够是整个文件系统或者文件系统的子树。快照一般用来备份,保护用户错误和灾难恢复。ast
HDFS快照的实现:class
· 快照建立是瞬间的,花费是O(1)不包过inode lookup时间。
· 若是和快照相关的,在修改的时候会使用额外的内存:内存使用时O(M),M是修改的文件和目录个数。
· Datanode中的block不会被复制:快照只会记录block list和文件大小。不会进行数据复制。
· 快照不会影响HDFS操做:修改被反转再被顺序记录,这样当前的数据仍是和之前同样访问。快照的数据经过当前的数据而后使用记录undo。
快照能够在任何目录上,一旦目录被设置了snapshottable。Snapshottable容许65536个并发快照。Snapshottable目录个数没有限制。管理员能够对任何目录设置为snapshottable。若是快照在snapshottable目录,在快照删除前,目录不能被删除,也不能重命名。
snapshottable目录是不能嵌套的。也就是说若是父目录,或者子目录已经设置了snapshottable目录,那么就不能再设置。
对于一个snapshottable目录,路径.snapshot用来访问快照。假设/foo是是snapshottable目录,/foo/bar是/foo中的文件,而且/foo有一个快照s0。/foo/.snapshot/s0/bar就是/foo/bar的快照副本。一般的API和CLI能够在.snapshot路径上使用。好比:
· 列出全部snapshottable目录下的全部快照:
hdfs dfs -ls /foo/.snapshot
· 列出快照s0的全部文件:
hdfs dfs -ls /foo/.snapshot/s0
· 从快照中复制文件:
hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp
HDFS快照特性引入了一个新的保留地址用来和快照交互:.snapshot。当从老的HDFS版本不支持快照的,升级时若是有.snapshot那么须要先删除避免出现冲突。
容许快照
容许对目录建立快照,若是完成而且成功那么目录就会变成snapshottable。
hdfs dfsadmin -allowSnapshot <path>
参数:snapshottable目录的地址。
禁止快照
禁止目录建立快照。全部快照在禁用前必须删除
hdfs dfsadmin -disallowSnapshot <path>
参数:snapshottable目录的地址。
建立快照
在snapshottable目录上建立快照。须要snapshottable目录的owner权限
hdfs dfs -createSnapshot <path> [<snapshotName>]
snapshotname默认是s'yyyyMMdd-HHmmss.SSS 好比s20130412-151029.033
删除快照
从snapshottable目录删除快照。须要snapshottable 目录owner权限。
hdfs dfs -deleteSnapshot <path> <snapshotName>
重命名快照
快照重命名,须要snapshottable 目录owner权限。
hdfs dfs -renameSnapshot <path> <oldName> <newName>
获取snapshottable目录列表
列出全部snapshottable目录
hdfs lsSnapshottableDir
获取快照不通的报告
获取2个快照的不一样,须要2个快照目录的全部读权限。
命令:hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
结果:
+ |
The file/directory has been created. |
- |
The file/directory has been deleted. |
M |
The file/directory has been modified. |
R |
The file/directory has been renamed. |
RENAME表示文件重命名可是还在snapshottable目录下。一个文件或者目录移动出了snapshottable目录,那么就被认为是删除了。一个文件或者目录移动到snapshottable目录,就被认为是建立。
Snapshot差别报告不会爆炸相同操做的顺序。好比若是目录从/foo重命名为/foo2而后在/foo2建立了一个文件bar,那么差别报告:
R. /foo -> /foo2
M. /foo/bar
在重命名后的目录上的操做,报告是以前路径的,好比上面的报告。