1、通過垃圾箱恢復
使用這種方式的前提是在hdfs上面開啟trash功能,默認是沒有開啟的。interval的值默認為0,單位是分鍾。只需要在hadoop的配置文件core-site.xml中添加下面的內容:
<!--Enable Trash -->
<property>
<name>fs.trash.interval</name>
<value>120</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
</property>
添加好上述內容后,不需要重啟后台程序,直接就會生效。
執行刪除操作后,會先將文件移動到當前操作用戶的.Trash/Current目錄下面。例如:
[root@spark hadoop]# hdfs dfs -rm -r /widow
18/01/15 15:54:49 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 120 minutes, Emptier interval = 120 minutes.
Moved: 'hdfs://spark:9000/widow' to trash at: hdfs://spark:9000/user/root/.Trash/Current
我這里是以root用戶進行操作的,所以HDFS上面上的路徑/user/root/.Trash/Current
恢復:
#hdfs dfs -mv /user/root/.Trash/Current/widow /
如果確定要刪除的文件,直接將文件或目錄drop掉,不放到trash里面,刪除的時候使用參數-skipTrash:
#hdfs dfs -rm -r -skipTrash /widow
2、通過快照恢復
hadoop從2.1版本后開始支持HDFS快照(SnapShot)功能,
- 快照創建瞬時性:除去inode的查詢時間,算法消耗O(1)復雜度。
- 只有在對快照修改時才會消耗額外內存:內存使用O(M),M是被修改的文件或者目錄數。
- DataNode的block不被復制:快照文件記錄block列表和文件大小。不做數據的拷貝復制。
- 快照不會對正常HDFS操作產生不利影響:所有的修改都按照時間倒序排序,因此當前數據總能被直接訪問到。快照數據是根據與當前數據進行變更部分的差值計算得來的。
創建快照前要先對目錄進行檢查是否可以創建快照:
#hdfs lsSnapshottableDir
一個可以快照的目錄最多可以允許同時65536個快照同時存在,嵌套的可快照目錄目前還不允許
管理員操作:
1)允許快照:
#hdfs dfsadmin -allowSnapshot <path>
path即想創建快照的目錄的路徑。通過上述命令將一個目錄變成可快照的目錄。
2)創建快照
一般使用普通用戶操作,此用戶需要有操作可快照目錄的權限,最好是該目錄的owner。管理員可以進行任何操作。
#hdfs dfs -createSnapshot <path> [<snapshotName>]
<path>可快照目錄的路徑,<snapshotName>快照的名稱,可以不寫,默認會生成一個格式為's'yyyyMMdd-HHmmss.SSS
3)刪除快照
# hdfs dfs -deleteSnapshot <path> <snapshotName>
<path>可快照目錄的路徑 ,<snapshotName>快照的名稱
4)重命名快照
# hdfs dfs -renameSnapshot <path> <oldname> <newname>
<path>可快照目錄的路徑,<oldname>老名字, <newname>新名字
5)獲取可快照目錄的信息
# hdfs lsSnapshottableDir
6)獲取快照的差異報告
#hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
<path>可快照目錄的路徑,<fromSnapshot>源快照名,<toSnapshot>目的快照名
結果:
+ | 文件或目錄被創建。 |
- | 文件或目錄被刪除。 |
M | 文件或目錄被修改。 |
R | 文件或目錄被重命名。 |
已經創建快照的目錄無法被刪除,只有刪除該目錄下的所有快照,才允許刪除這個目錄。
使用方式:
1)創建快照:
#hdfs dfsadmin -allowSnapshot /widow
#hdfs dfs -put test.txt /widow
#hdfs dfs -createSnapshot /widow import-data
將test文件刪除:
#hdfs dfs -rm -r /widow/test.txt
誤刪除后就可以使用快照目錄進行恢復:
#hdfs dfs -cp -ptopax /widow/.snapshot/import-data/test.txt /widow