一、介绍
- 默认情况下,HDFS中Trash是没有开启的,删除操作的数据将会被直接删除
- 启用Trash功能后,从HDFS中删除某些内容时,文件或目录不会立即被清除,它们将被移动到回收站Current目录中(/user/${username}/.Trash/current)
- .Trash中的文件在用户可配置的时间延迟后被永久删除
- 可以简单地将回收站里的文件移动到.Trash目录之外的位置来恢复回收站中的文件和目录
- Trash Checkpoint仅仅是用户回收站下的一个目录,用于存储在创建检查点之前删除的所有文件或目录
- Trash Checkpoint目录在/user/${username}/.Trash/{timestamp_of_checkpoint_creation}
- 最近删除的文件被移动到回收站Current目录,并且在可配置的时间间隔内,HDFS会为在Current回收站
- 目录下的文件创建检查点/user/${username}/.Trash/<日期>,并在过期时删除旧的检查点
二、HDFS Trash功能开启
按照以下步骤进行操作,在server1上alanchan用户执行stop-dfs.sh命令。
1、关闭HDFS集群
[alanchan@server1 ~]$ jps
15154 QuorumPeerMain
32722 Jps
19075 NameNode
20780 DFSZKFailoverController
28893 ResourceManager
[alanchan@server1 ~]$ stop-dfs.sh
Stopping namenodes on [server1 server2]
Stopping datanodes
Stopping journal nodes [server4 server3 server2]
Stopping ZK Failover Controllers on NN hosts [server1 server2]
[alanchan@server1 ~]$ jps
15154 QuorumPeerMain
28893 ResourceManager
1679 Jps
2、修改core-site.xml文件
<!-- 增加垃圾桶机制 单位是分钟 -->
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>
#fs.trash.interval:回收站中的文件多少分钟后会被系统永久删除。如果为零,Trash功能将被禁用。
#fs.trash.checkpoint.interval:前后两次检查点的创建时间间隔(单位也是分钟),新的检查点被创建后,随之旧的检查点就会被系统永久删除。如果为零,则将该值设置为fs.trash.interval的值
3、同步集群配置文件
scp -r /usr/local/bigdata/hadoop-3.1.4/etc/hadoop/core-site.xml server2:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop
scp -r /usr/local/bigdata/hadoop-3.1.4/etc/hadoop/core-site.xml server3:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop
scp -r /usr/local/bigdata/hadoop-3.1.4/etc/hadoop/core-site.xml server4:/usr/local/bigdata/hadoop-3.1.4/etc/hadoop
4、启动HDFS集群
[alanchan@server1 ~]$ start-dfs.sh
Starting namenodes on [server1 server2]
Starting datanodes
Starting journal nodes [server4 server3 server2]
Starting ZK Failover Controllers on NN hosts [server1 server2]
[alanchan@server1 ~]$ jps
16561 NameNode
15154 QuorumPeerMain
17187 DFSZKFailoverController
28893 ResourceManager
17519 Jps
至此已经完成了环境的配置,接下来将进行验证。
三、HDFS Trash功能验证
1、删除文件并验证
开启Trash功能后,正常执行删除操作,文件实际并不会被直接删除,而是被移动到了垃圾回收站
[alanchan@server1 ~]$ hadoop fs -ls /test
Found 3 items
drwxr-xr-x - alanchan supergroup 0 2022-09-09 11:32 /test/data_o
-rw-r--r-- 3 alanchan supergroup 8728 2022-09-13 09:19 /test/temp.txt
drwxr-xr-x - alanchan supergroup 0 2022-09-09 17:01 /test/test2
#文件已经移动到垃圾桶中
[alanchan@server1 ~]$ hadoop fs -rm /test/temp.txt
2022-09-13 09:20:14,311 INFO fs.TrashPolicyDefault: Moved: 'hdfs://HadoopHAcluster/test/temp.txt' to trash at: hdfs://HadoopHAcluster/user/alanchan/.Trash/Current/test/temp.txt
#文件已经删除
[alanchan@server1 ~]$ hadoop fs -ls /test
Found 2 items
drwxr-xr-x - alanchan supergroup 0 2022-09-09 11:32 /test/data_o
drwxr-xr-x - alanchan supergroup 0 2022-09-09 17:01 /test/test2
#在垃圾桶内查看该文件
[alanchan@server1 ~]$ hadoop fs -ls /user/alanchan/.Trash/Current/test
Found 1 items
-rw-r--r-- 3 alanchan supergroup 8728 2022-09-13 09:19 /user/alanchan/.Trash/Current/test/temp.txt
2、不进回收站的删除
希望直接把文件删除,不需要再经过Trash回收站了
可以在执行删除操作的时候添加一个参数:-skipTrash.
[alanchan@server1 ~]$ hadoop fs -ls /test
Found 3 items
drwxr-xr-x - alanchan supergroup 0 2022-09-09 11:32 /test/data_o
drwxr-xr-x - alanchan supergroup 0 2022-09-09 17:01 /test/test2
-rw-r--r-- 3 alanchan supergroup 1408 2022-09-13 09:24 /test/user.sql
#删除文件
[alanchan@server1 ~]$ hadoop fs -rm -skipTrash /test/user.sql
Deleted /test/user.sql
[alanchan@server1 ~]$ hadoop fs -ls /test
Found 2 items
drwxr-xr-x - alanchan supergroup 0 2022-09-09 11:32 /test/data_o
drwxr-xr-x - alanchan supergroup 0 2022-09-09 17:01 /test/test2
3、从Trash中恢复文件
回收站里面的文件,在到期被自动删除之前,都可以通过命令恢复出来
使用mv、cp命令把数据文件从Trash目录下复制移动出来就可以了
4、清空Trash
除了fs.trash.interval参数控制到期自动删除之外,用户还可以通过命令手动清空回收站,释放HDFS磁盘存储空间
删除整个回收站目录,将会清空回收站
HDFS提供了一个命令行工具来完成这个工作:hadoop fs -expunge。该命令立即从文件系统中删除过期的检查点
[alanchan@server1 ~]$ hadoop fs -ls /user
Found 1 items
drwx------ - alanchan supergroup 0 2022-09-13 09:20 /user/alanchan
[alanchan@server1 ~]$ hadoop fs -expunge /user
2022-09-13 09:28:30,888 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://HadoopHAcluster/user/alanchan/.Trash
2022-09-13 09:28:30,888 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://HadoopHAcluster/user/alanchan/.Trash
2022-09-13 09:28:30,896 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://HadoopHAcluster/user/alanchan/.Trash
2022-09-13 09:28:30,940 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/alanchan/.Trash/220913092830
以上,完成了回收站的介绍、配置以及验证。