实验环境
hadoop版本: apache-hadoop-3.2.4
HDFS回收站
hadoop 的HDFS中也提供了回收站(trash)的概念,使得数据被误删以后,还可以通过回收站找回来。
1.启用回收站
在core-site.xml中添加如下配置,并重新启动集群。
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>1440</value>
</property>
-
fs.trash.interval
指文件在回收站的暂存时间,文件被删除后实际上是被移动到回收站暂存目录下,而不是马上删除。等到回收周期到了,hdfs才会真正的将数据删除。默认的单位是分钟,1440分钟恰好就是一天。 -
fs.trash.checkpoint.interval
指垃圾回收的检查间隔,一般不会大于fs.trash.interval。
2.验证回收站
[root@hadoop1 hadoop-3.2.4]# hdfs dfs -ls /test
Found 1 items
-rw-r--r-- 3 root supergroup 18 2024-10-12 10:46 /test/a.txt
以test目录为例,下面有一个名为a.txt文件,我们对它执行删除操作。
[root@hadoop1 hadoop-3.2.4]# hdfs dfs -rm /test/a.txt
2024-10-15 22:38:14,776 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop1:9000/test/a.txt' to trash at: hdfs://hadoop1:9000/user/root/.Trash/Current/test/a.txt
通过命令的输出结果可以看到/test/a.txt文件实际被move到/root/.Trash/Current目录下了。
[root@hadoop1 hadoop-3.2.4]# hdfs dfs -ls -R /user/root/.Trash/Current
drwx------ - root supergroup 0 2024-10-15 22:38 /user/root/.Trash/Current/test
-rw-r--r-- 3 root supergroup 18 2024-10-12 10:46 /user/root/.Trash/Current/test/a.txt
如果刚才的操作是一时不小心,那么通过mv命令可以将文件还原回去。
root@namenode:/opt/hadoop-3.2.4# hdfs dfs -mv /user/root/.Trash/Current/test/a.txt /test
3.清空回收站
[root@hadoop1 hadoop-3.2.4]# hdfs dfs -expunge
2024-10-15 22:43:04,860 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://hadoop1:9000/user/root/.Trash
2024-10-15 22:43:04,860 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://hadoop1:9000/user/root/.Trash
2024-10-15 22:43:04,874 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://hadoop1:9000/user/root/.Trash
2024-10-15 22:43:04,882 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/241015224304
4.直接删除(不放入回收站)
在删除文件时,也可以加入-skipTrash 选项略过回收站。
[root@hadoop1 ~]# hdfs dfs -rm -skipTrash /test/a.txt
Deleted /test/a.txt