HDFS恢復誤刪操作的方法


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM