HDFS的垃圾桶机制
每一个文件系统都会有垃圾桶机制,便于我们将删除的数据回收到垃圾桶里面去,避免垃圾桶,避免我们某些误操作错误的删除一些重要文件,回收到垃圾桶里里面的资料数据,都可以进行恢复
1. 垃圾桶机制配置的详解
服务器修改core-site.xml添加以下这两个配置
fs.trash.interval
10080
检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。
该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。
如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。
fs.trash.checkpoint.interval
0
垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。
如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时,
它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。
2. 垃圾桶机制验证
如果启用垃圾箱配置,dfs命令删除的文件不会立即从HDFS中删除。相反,HDFS将其移动到垃圾目录(每个用户在/user/
最近删除的文件移动到当前的垃圾目录(/user/
在垃圾桶里过期后,NameNode将从HDFS命名空间中删除该文件。删除文件会导致与文件关联的块被释放。请注意,用户删除文件的时间与HDFS中相应增加可用空间的时间之间可能存在明显的时间延迟。
以下是一个将显示FS Shell如何从HDFS中删除文件的示例。我们在目录delete下创建了2个文件(test1&test2)
创建两个文件夹
[root@node01 bin]$ hdfs dfs -mkdir -p delete/test1
[root@node01 bin]$ hdfs dfs -mkdir -p delete/test2
[root@node01 bin]$ hdfs dfs -ls delete
Found 2 items
drwxr-xr-x - root supergroup 0 2021-04-14 13:45 delete/test1
drwxr-xr-x - root supergroup 0 2021-04-14 13:45 delete/test2
2) 删除其中的一个文件夹
我们将删除文件test1。下面的注释显示该文件已被移至垃圾箱目录
[root@node01 bin]$ hdfs dfs -rm -r delete/test1
21/04/14 13:46:03 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 10 minutes, Emptier interval = 0 minutes.
21/04/14 13:46:03 INFO fs.TrashPolicyDefault: Moved: 'hdfs://localhost:9000/user/root/delete/test1' to trash at: hdfs://localhost:9000/user/root/.Trash/Current/user/root/delete/test1
Moved: 'hdfs://localhost:9000/user/root/delete/test1' to trash at: hdfs://localhost:9000/user/root/.Trash/Current
3) 跳过垃圾桶选项 :慎用
现在我们将使用skipTrash选项删除文件,该选项不会将文件发送到垃圾箱。它将从HDFS中完全删除。
[root@node01 bin]$ hdfs dfs -rm -r -skipTrash delete/test2
Deleted delete/test2
我们现在可以看到垃圾目录仅包含文件test1。
[root@node01 bin]$ hdfs dfs -ls .Trash/Current/user/root/delete/
Found 1 items
drwxr-xr-x - root supergroup 0 2021-04-14 13:45 .Trash/Current/user/root/delete/test1
所以文件test1进入垃圾箱,文件test2被永久删除。
恢复垃圾桶数据
执行以下命令,重新恢复垃圾桶数据
hdfs dfs -mv /user/root/.Trash/Current/user/root/delete/test1 /user/root/delete/