HDFS会早每一个用户目录下创建一个洳何恢复回收站的误删目录即:/user/username/.Trash。每一个被删除的文件和目录都会有一个回收周期(fs.trash.interval)。在这个回收周期内文件实际上会被移动到這个如何恢复回收站的误删目录下面,可以被用户手动进行恢复当回收周期到达时,HDFS就会将这个文件/目录彻底删除
在HDFS内部的具体实现僦是在NameNode中开启了一个后台线程Emptier(默认是org.apache.hadoop.fs.TrashPolicyDefault.Emptier,也可以通过fs.trash.classname指定TrashPolicy类)这个线程专门管理和监控系统如何恢复回收站的误删下面的所有文件/目录,對于已经超过生命周期的文件/目录这个线程就会自动的删除它们,不过这个管理的粒度很大另外,用户也可以手动清空如何恢复回收站的误删(通过hdfs -expunge)也可以使用rm清空如何恢复回收站的误删,此时不会再触发如何恢复回收站的误删操作。Emptier每隔fs.trash.interval分钟就清空一次用户如何恢复回收站的误删即先检查每个用户如何恢复回收站的误删目录,然后删除寿命超过fs.trash.interval的目录最后将当前存放删除的文件/目录的如何恢複回收站的误删目录/user/用户名/.Trash/current重命名为一个/user/用户名/.Trash/yyMMddHHmm。也就是从理论上说在如何恢复回收站的误删里的目录会保留fs.trash.interval
#清空如何恢复回收站的误刪,实际上是立即执行了一次清理trash的checkpoint