启动HDFS的垃圾回收站为了防止误删,一般默认是关闭的,需要我们自己配置文件打开。
修改core-site.xml
<property>
<name>fs.trash.interval</name>
<value>1440</value>
<!--在回收站停留的时间,单位是分钟-->
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>1440</value>
<!--检查回收站的时间间隔,小于等于上面的值,此时间值不要太短,可以1天左右。若设置1分钟,则去回收站找该文件比较麻烦;
该机制会将文件以一个时间戳的方式留存。-->
</property>
一般垃圾回收站的路径是HDFS上的 /user/用户名/.Trash/
hadoop fs -ls /user/hadoop/.Trash/Current/
被删除的文件会保存在Current这个目录下,也会以时间戳为目录名
演示例子:
上传文件hadoop fs -put my.cnf /
删除文件hadoop fs -rm -r /my.cnf
提示:
18/07/21 11:39:17 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 1 minutes.
18/07/21 11:39:17 INFO fs.TrashPolicyDefault: Moved: 'hdfs://bd1803/my.cnf' to trash at: hdfs://bd1803/user/cry/.Trash/Current/my.cnf
Moved: 'hdfs://bd1803/my.cnf' to trash at: hdfs://bd1803/user/cry/.Trash/Current
查找该被删除的文件:
hadoop fs -ls /user/cry/.Trash/Current
提示:
Found 1 items
-rw-r--r-- 2 cry supergroup 1208 2018-07-21 11:38 /user/cry/.Trash/Current/my.cnf
恢复该文件:
hadoop fs -mv /user/cry/.Trash/Current/my.cnf /tmp/
如果我们不想跳过垃圾回收站,直接删除某个文件,那么直接使用 hadoop fs -rm -r -skipTrash /文件路径
我们想恢复被误删的文件只需要 hadoop fs -mv /user/hadoop/.Trash/Current/123.log /指定文件路径
(假如被误删的文件为123.log)