[HDFS Manual] CH8 HDFS Snapshots

HDFS Snapshots

HDFS Snapshots. 1node

1. 概述... 1併發

1.1 Snapshottable目錄... 1spa

1.2 快照路徑... 1orm

2. 帶快照的更新... 1內存

3. 快照操做... 1it

3.1 管理操做... 1io

3.2 用戶操做... 1table

 

1. 概述

HDFS快照是隻讀的,一個時間點文件系統的一個副本。快照能夠是整個文件系統或者文件系統的子樹。快照一般用來備份,保護用戶錯誤和災難恢復。ast

HDFS快照的實現:class

·         快照建立是瞬間的,花費是O(1)不包過inode lookup時間。

·         若是和快照相關的,在修改的時候會使用額外的內存:內存使用時O(M),M是修改的文件和目錄個數。

·         Datanode中的block不會被複制:快照只會記錄block list和文件大小。不會進行數據複製。

·         快照不會影響HDFS操做:修改被反轉再被順序記錄,這樣當前的數據仍是和之前同樣訪問。快照的數據經過當前的數據而後使用記錄undo

1.1 Snapshottable目錄

快照能夠在任何目錄上,一旦目錄被設置了snapshottableSnapshottable容許65536個併發快照。Snapshottable目錄個數沒有限制。管理員能夠對任何目錄設置爲snapshottable。若是快照在snapshottable目錄,在快照刪除前,目錄不能被刪除,也不能重命名。

snapshottable目錄是不能嵌套的。也就是說若是父目錄,或者子目錄已經設置了snapshottable目錄,那麼就不能再設置。

1.2 快照路徑

對於一個snapshottable目錄,路徑.snapshot用來訪問快照。假設/foo是是snapshottable目錄,/foo/bar/foo中的文件,而且/foo有一個快照s0/foo/.snapshot/s0/bar就是/foo/bar的快照副本。一般的APICLI能夠在.snapshot路徑上使用。好比:

·         列出全部snapshottable目錄下的全部快照:
hdfs dfs -ls /foo/.snapshot

·         列出快照s0的全部文件:
hdfs dfs -ls /foo/.snapshot/s0

·         從快照中複製文件:
hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp

2. 帶快照的更新

HDFS快照特性引入了一個新的保留地址用來和快照交互:.snapshot。當從老的HDFS版本不支持快照的,升級時若是有.snapshot那麼須要先刪除避免出現衝突。

3. 快照操做

3.1 管理操做

容許快照

容許對目錄建立快照,若是完成而且成功那麼目錄就會變成snapshottable

hdfs dfsadmin -allowSnapshot <path>

參數:snapshottable目錄的地址。

禁止快照

禁止目錄建立快照。全部快照在禁用前必須刪除

hdfs dfsadmin -disallowSnapshot <path>

參數:snapshottable目錄的地址。

3.2 用戶操做

建立快照

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

在重命名後的目錄上的操做,報告是以前路徑的,好比上面的報告。

相關文章
相關標籤/搜索