HDFS會早每一個用戶目錄下創(chuàng)建一個回收站目錄惯退,即:/user/username/.Trash每一個被刪除的文件和目錄,都會有一個回收周期(fs.trash.interval)沦疾。在這個回收周期內箕般,文件實際上會被移動到這個回收站目錄下面辱匿,可以被用戶手動進行恢復灶泵。當回收周期到達時,HDFS就會將這個文件/目錄徹底刪除补箍。
在每個節(jié)點的core-site.xml上配置為1天:
<property>
<name>fs.trash.interval</name>
<value>1440</value>
<description>minutes between trash checkpoints</description>
</property>
在HDFS內部的具體實現就是在NameNode中開啟了一個后臺線程Emptier(默認是org.apache.hadoop.fs.TrashPolicyDefault.Emptier改执,也可以通過fs.trash.classname指定TrashPolicy類)啸蜜,這個線程專門管理和監(jiān)控系統(tǒng)回收站下面的所有文件/目錄,對于已經超過生命周期的文件/目錄辈挂,這個線程就會自動的刪除它們衬横,不過這個管理的粒度很大。另外呢岗,用戶也可以手動清空回收站(通過hdfs dfs -expunge)冕香,也可以使用rm清空回收站,此時后豫,不會再觸發(fā)回收站操作悉尾。Emptier每隔fs.trash.interval分鐘就清空一次用戶回收站。即先檢查每個用戶回收站目錄挫酿,然后刪除壽命超過fs.trash.interval的目錄构眯,最后將當前存放刪除的文件/目錄的回收站目錄/user/用戶名/.Trash/current重命名為一個/user/用戶名/.Trash/yyMMddHHmm。也就是從理論上說早龟,在回收站里的目錄會保留fs.trash.interval – 2*fs.trash.interval時間區(qū)間惫霸。
如果使用rm命令時,啟用trash的fs.trash.interval參數不用重啟后臺進程葱弟。但要求在/user目錄下需要有對應用戶的home目錄壹店,否則會因為創(chuàng)建目錄失敗報錯。
rmr: Failed to move to trash: hdfs://test1:9000/tmp: Permission denied: user=root, access=WRITE, inode=”/user”:hdfs:supergroup:drwxr-xr-x
成功刪除會提示mv到trash目錄下芝加。
hdfs dfs -rmr /tmp
Moved: 'hdfs://test1:9000/tmp' to trash at: hdfs://test1:9000/user/hdfs/.Trash/Current
hdfs dfs -ls -R /user/hdfs
drwx------ - hdfs supergroup 0 2014-12-19 11:24 /user/hdfs/.Trash
drwx------ - hdfs supergroup 0 2014-12-19 11:24 /user/hdfs/.Trash/Current
drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp
drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp/txt
drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp/txt/hello
-rw-r--r-- 3 hdfs supergroup 137 2014-12-18 11:05 /user/hdfs/hello.txt
-rw-r--r-- 3 hdfs supergroup 137 2014-12-18 11:05 /user/hdfs/hello.txt.bak
?#恢復回收站目錄:
hdfs dfs -mv /user/hdfs/.Trash/Current/tmp /
-bash-4.1$ hdfs dfs -ls -R /tmp
drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /tmp/txt
drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /tmp/txt/hello
#清空回收站硅卢,實際上是立即執(zhí)行了一次清理trash的checkpoint。
hdfs dfs -expunge
/12/19 17:31:29 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/hdfs/.Trash/141219173129