一、場景
很多用過HDFS的人都會有過這種經歷,在HDFS上操作一組數據,不小心執行了一個命令“hdfs dfs -rm -r /xxx/xxx”,沒有刪除提示,整個目錄下幾個G、T的數據,一下子就沒有了。刪除之後纔會發現這個目錄下的數據有多重要,這個時候先不要準備刪庫跑路。rm -rf /
不好解決,但是在HDFS中有個功能可以輕鬆解決這個問題,那就是Trash回收站功能。
二、開啓回收站
2.1 原生Hadoop配置
修改Hadoop每個節點的core-site.xml
文件,增加一個屬性。
fs.trash.interval
是在指在這個回收週期之內,文件實際上是被移動到trash的這個目錄下面,而不是馬上把數據刪除掉。等到回收週期真正到了以後,hdfs纔會將數據真正刪除。默認的單位是分鐘。 設置0則關閉該功能。
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
CDH配置
進入HDFS配置。搜索fs.trash.interval
參數
三、測試
上傳個test.txt
文件到/user/admin/
目錄下
hdfs dfs -put test.txt /user/admin/
刪除該文件
[root@master ~]# hdfs dfs -rm -r /user/admin/test.txt
20/03/17 17:15:41 INFO fs.TrashPolicyDefault: Moved: 'hdfs://master.cdh:8020/user/admin/test.txt' to trash at: hdfs://master.cdh:8020/user/root/.Trash/Current/user/admin/test.txt
提示該文件已經移到/user/root/.Trash/Current/user/admin/test.txt
,當前登陸用戶家目錄下的.Trash
目錄。
查看該目錄,被刪除的文件已經在裏面了
[root@master ~]# hdfs dfs -ls /user/root/.Trash/Current/user/admin/
Found 1 items
-rw-r--r-- 3 root admin 4 2020-03-17 17:13 /user/root/.Trash/Current/user/admin/test.txt
恢復文件,就是將回收站的文件移回之前所在的目錄
[root@master ~]# hdfs dfs -mv /user/root/.Trash/Current/user/admin/test.txt /user/admin
清空回收站命令
[root@master ~]# hdfs dfs -expunge
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: Deleted trash checkpoint: /user/root/.Trash/200317160000
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/200317172502
跳過回收站,直接刪除命令
[root@master ~]# hdfs dfs -rm -r -skipTrash /user/root/123123
Deleted /user/root/123123