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
在重命名後的目錄上的操做,報告是以前路徑的,好比上面的報告。