启用Hadoop集群垃圾箱配置

配置参数:

<property>
     <name>fs.trash.interval</name>
     <value>10</value>
     <description>检查点被删除后的分钟数。 如果为零,垃圾桶功能将被禁用。 
     该选项可以在服务器和客户端上配置。 如果垃圾箱被禁用服务器端,则检查客户端配置。 
     如果在服务器端启用垃圾箱,则会使用服务器上配置的值,并忽略客户端配置值。</description>
</property>

<property>
     <name>fs.trash.checkpoint.interval</name>
     <value>0</value>
     <description>垃圾检查点之间的分钟数。 应该小于或等于fs.trash.interval。 
     如果为零,则将该值设置为fs.trash.interval的值。 每次检查指针运行时,
     它都会从当前创建一个新的检查点,并删除比fs.trash.interval更早创建的检查点。</description>
</property>

如果启用垃圾箱配置,dfs命令删除的文件不会立即从HDFS中删除。相反,HDFS将其移动到垃圾目录(每个用户在/user/<username>/.Trash下都有自己的垃圾目录)。只要文件保留在垃圾箱中,文件可以快速恢复。

最近删除的文件移动到当前的垃圾目录(/user/<username>/.Trash/Current),并且在一个可配置的时间间隔内,HDFS创建检查点(在/ user / <username> /.Trash / <date>下)查找当前垃圾目录中的文件,并在旧的检查点过期时删除它们。查看关于垃圾检查点的FS shell的删除命令。

在垃圾桶里过期后,NameNode将从HDFS命名空间中删除该文件。删除文件会导致与文件关联的块被释放。请注意,用户删除文件的时间与HDFS中相应增加可用空间的时间之间可能存在明显的时间延迟。

以下是一个将显示FS Shell如何从HDFS中删除文件的示例。我们在目录delete下创建了2个文件(test1&test2)

[elon@hadoop4 bin]$ hadoop fs -mkdir -p delete/test1
[elon@hadoop4 bin]$ hadoop fs -mkdir -p delete/test2
[elon@hadoop4 bin]$ hadoop fs -ls delete
Found 2 items
drwxr-xr-x   - elon supergroup          0 2018-03-03 13:45 delete/test1
drwxr-xr-x   - elon supergroup          0 2018-03-03 13:45 delete/test2

我们将删除文件test1。下面的注释显示该文件已被移至垃圾箱目录。

[elon@hadoop4 bin]$ hadoop fs -rm -r delete/test1
18/03/03 13:46:03 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 10 minutes, Emptier interval = 0 minutes.
18/03/03 13:46:03 INFO fs.TrashPolicyDefault: Moved: 'hdfs://localhost:9000/user/elon/delete/test1' to trash at: hdfs://localhost:9000/user/elon/.Trash/Current/user/elon/delete/test1
Moved: 'hdfs://localhost:9000/user/elon/delete/test1' to trash at: hdfs://localhost:9000/user/elon/.Trash/Current

现在我们将使用skipTrash选项删除文件,该选项不会将文件发送到垃圾箱。它将从HDFS中完全删除。

[elon@hadoop4 bin]$ hadoop fs -rm -r -skipTrash delete/test2
Deleted delete/test2

我们现在可以看到垃圾目录仅包含文件test1。

[elon@hadoop4 bin]$ hadoop fs -ls .Trash/Current/user/elon/delete/
Found 1 items
drwxr-xr-x   - elon supergroup          0 2018-03-03 13:45 .Trash/Current/user/elon/delete/test1

所以文件test1进入垃圾箱,文件test2被永久删除。

在一个可配置的时间间隔内,HDFS创建检查点(在/ user / <username> /.Trash / <date>下)查找当前垃圾目录中的文件

[elon@hadoop4 bin]$ hadoop fs -ls .Trash/180303135000/user/elon/delete
Found 1 items
drwxr-xr-x   - elon supergroup          0 2018-03-03 13:45 .Trash/180303135000/user/elon/delete/test1

Reference
[1]fs.trash.interval & fs.trash.checkpoint.interval http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/core-default.xml
[2]SpaceReclamationhttp://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html#Space_Reclamation
[3] expunge http://hadoop.apache.org/docs/r2.7.5/hadoop-project-dist/hadoop-common/FileSystemShell.html#expunge