通過snapshot實現 hdfs上文件的備份
==========================================================================================
1、允許創建快照
首先,在你想要進行備份的文件夾下面 執行命令,允許該文件夾創建快照
hdfs dfsadmin -allowSnapshot <path>
例如:hdfs dfsadmin -allowSnapshot /Workspace/linlin
出現此命令證明已經允許創建快照成功
=================================================================================================
2、創建快照
接下來就開始對此文件夾進行備份
hdfs dfs -createSnapshot <path> [name]
例如 hdfs dfs -createSnapshot /Workspace/linlin bak1

此命令出現證明已經創建快照成功
此時我們可以考慮一下是否能夠在linlin子目錄創建快照
hdfs'上目錄結構如圖所示

然后嘗試在snaptest上建立快照
hdfs dfs -createSnapshot /Workspace/linlin/snaptest bak2

報錯,可見,只能在你允許的目錄下面建立快照;
第一次快照 bak1 時候 沒有snaptest文件夾,現在多了snaptest文件夾,再創建一次快照
若還是用
hdfs dfs -createSnapshot /Workspace/linlin bak1

執行 hdfs dfs -createSnapshot /Workspace/linlin bak2

創建成功;
==============================================================================================================
3、查看快照
查看所有的snapshottable
hdfs lsSnapshottableDir

查看到曾經允許創建快照的所有目錄
查看當前快照下的文件 hadoop sanpshot 創建快照時候,默認的文件夾是.snapshot 查看時候必須加上.snapshot才能看到里面備份的東西;
.snapshot是后來hadoop才有的產物,所以之前若是有文件夾命名為snapshot關鍵字就不能創建快照了;
執行命令 hdfs dfs -ls /Workspace/linlin/.snapshot/

能夠看到 這個快照下 有三個備份 分別是 bak1 、bak2 、 linlin
===========================================================================================================
4、對比快照
進行快照之間的對比,看到兩個快照之間備份文件的區別
執行命令
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
例如:
執行命令 hdfs snapshotDiff /Workspace/linlin bak1 bak2

結果 Results:
| + | 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. |
這里出現M 代表我對linlin文件夾進行了修改,+代表新增了一個文件夾 snaptest
============================================================================================================================
5、恢復快照
恢復快照:
hdfs dfs -cp <path> <path>
例如: hdfs dfs -cp /Workspace/linlin/.snapshot/bak2/snaptest /Workspace
查看hdfs目錄:
已經成功恢復到 Workspace
==================================================================================================================================
題外話:
我們可以嘗試着刪除建立過快照的文件夾:是無法刪除的,會提示

存在快照無法刪,證明若是在文件夾下面建立快照,文件夾就無法刪除或者移動
原文:http://www.nosqlcn.com/ShowArticle/23
