一、场景
很多用过HDFS的人都会有过这种经历,在HDFS上操作一组数据,不小心执行了一个命令“hdfs dfs -rm -r /xxx/xxx”,没有删除提示,整个目录下几个G、T的数据,一下子就没有了。删除之后才会发现这个目录下的数据有多重要,这个时候先不要准备删库跑路。rm -rf /
不好解决,但是在HDFS中有个功能可以轻松解决这个问题,那就是Trash回收站功能。
二、开启回收站
2.1 原生Hadoop配置
修改Hadoop每个节点的core-site.xml
文件,增加一个属性。
fs.trash.interval
是在指在这个回收周期之内,文件实际上是被移动到trash的这个目录下面,而不是马上把数据删除掉。等到回收周期真正到了以后,hdfs才会将数据真正删除。默认的单位是分钟。 设置0则关闭该功能。
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
CDH配置
进入HDFS配置。搜索fs.trash.interval
参数
三、测试
上传个test.txt
文件到/user/admin/
目录下
hdfs dfs -put test.txt /user/admin/
删除该文件
[root@master ~]# hdfs dfs -rm -r /user/admin/test.txt
20/03/17 17:15:41 INFO fs.TrashPolicyDefault: Moved: 'hdfs://master.cdh:8020/user/admin/test.txt' to trash at: hdfs://master.cdh:8020/user/root/.Trash/Current/user/admin/test.txt
提示该文件已经移到/user/root/.Trash/Current/user/admin/test.txt
,当前登陆用户家目录下的.Trash
目录。
查看该目录,被删除的文件已经在里面了
[root@master ~]# hdfs dfs -ls /user/root/.Trash/Current/user/admin/
Found 1 items
-rw-r--r-- 3 root admin 4 2020-03-17 17:13 /user/root/.Trash/Current/user/admin/test.txt
恢复文件,就是将回收站的文件移回之前所在的目录
[root@master ~]# hdfs dfs -mv /user/root/.Trash/Current/user/admin/test.txt /user/admin
清空回收站命令
[root@master ~]# hdfs dfs -expunge
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#deleteCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: Deleted trash checkpoint: /user/root/.Trash/200317160000
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: TrashPolicyDefault#createCheckpoint for trashRoot: hdfs://master.cdh:8020/user/root/.Trash
20/03/17 17:25:02 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/root/.Trash/200317172502
跳过回收站,直接删除命令
[root@master ~]# hdfs dfs -rm -r -skipTrash /user/root/123123
Deleted /user/root/123123