和 Linux 系统的回收站设计一样,HDFS 会为每一个用户创建一个回收站目录: /user/用户名/.Trash/
,开启该功能后, 每一个被用户通过 Shell 删除的文件或目录,都不是直接删除, 而是移动到 HDFS 的回收站内, 回收站中文件都一个生命周期,也就是当系统回收站中的文件或目录在一段时间之后没有被用户回复的话,HDFS 就会自动的把这个文件或目录彻底删除,之后用户就永远也找不回这个文件或目录了.
配置:
在每个节点上添加配置 core-site.xml
,增加如下内容
<property> <name>fs.trash.interval</name> <value>1440</value> </property>
1440 指定生命周期, 单位是分钟, 这里就是相当于 24 小时.
开启回收站后, data 目录会变得复杂, 也会存在有垃圾数据.
Java Api 操作方式:
public static boolean rm(FileSystem fs, Path path, boolean recursive, boolean skipTrash) throws IOException { if (!skipTrash) { Trash trashTmp = new Trash(fs, conf); if (trashTmp.moveToTrash(path)) { log.info("Moved to trash: " + path); return true; } } boolean ret = fs.delete(path, recursive); if (ret) { log.info("rm: " + path); } return ret; }
☠