HDFS 设置回收站及误删数据恢复

HDFS会早每一个用户目录下创建一个回收站目录,即:/user/username/.Trash每一个被删除的文件和目录,都会有一个回收周期(fs.trash.interval)。在这个回收周期内,文件实际上会被移动到这个回收站目录下面,可以被用户手动进行恢复。当回收周期到达时,HDFS就会将这个文件/目录彻底删除。
在每个节点的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类),这个线程专门管理和监控系统回收站下面的所有文件/目录,对于已经超过生命周期的文件/目录,这个线程就会自动的删除它们,不过这个管理的粒度很大。另外,用户也可以手动清空回收站(通过hdfs dfs -expunge),也可以使用rm清空回收站,此时,不会再触发回收站操作。Emptier每隔fs.trash.interval分钟就清空一次用户回收站。即先检查每个用户回收站目录,然后删除寿命超过fs.trash.interval的目录,最后将当前存放删除的文件/目录的回收站目录/user/用户名/.Trash/current重命名为一个/user/用户名/.Trash/yyMMddHHmm。也就是从理论上说,在回收站里的目录会保留fs.trash.interval – 2*fs.trash.interval时间区间。
如果使用rm命令时,启用trash的fs.trash.interval参数不用重启后台进程。但要求在/user目录下需要有对应用户的home目录,否则会因为创建目录失败报错。
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
#清空回收站,实际上是立即执行了一次清理trash的checkpoint。
hdfs dfs -expunge
/12/19 17:31:29 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/hdfs/.Trash/141219173129
上一篇:【linux基础】Linux系统中用命令行清空垃圾箱Trash


下一篇:iZotope Trash 2 for Mac(失真效果器)