HDFS 回收站

1. HDFS 回收站

回收站是HDFS2.X的新特性。与windows回收站一样,存在的意义是防止用户误删一些数据。假设误删了一些数据,还可以从回收站将数据恢复

HDFS默认是将回收站功能关闭的,因为实际生产环境中,是很少执行删除操作的,可能是半年删一次、一年删一次。

1.1. 开启回收站

编辑 etc/hadoop/core-site.xml,并分发给集群

1
2
3
4
5
6
7
8
9
10
11
12
<property>
<!-- 配置垃圾回收时间为1分钟,单位是minute。默认值为0,表示禁用回收站功能 -->
<name>fs.trash.interval</name>
<value>1</value>
</property>
<property>
<!-- 检查垃回收时间是否达到fs.trash.interval的时间间隔
默认值为0,表示与fs.trash.interval时间相等
要求 fs.trash.checkpoint.interval <= fs.trash.interval -->
<name>fs.trash.checkpoint.interval</name>
<value>0</value>
</property>

1.2. 删除文件测试

不必重启HDFS。直接删除一个文件。因为当前client的用户是root,所以HDFS会将文件放到用户家目录下的一个.Trash目录下

1
2
3
$ hdfs dfs -rm -r -f /input/1.txt
19/02/25 14:29:25 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://hadoop1:9000/input/1.txt' to trash at: hdfs://hadoop1:9000/user/root/.Trash/Current

查看用户目录

1
2
3
4
5
# hdfs dfs -ls -R /user/root
drwx------ - root supergroup 0 2019-02-25 14:29 /user/root/.Trash
drwx------ - root supergroup 0 2019-02-25 14:29 /user/root/.Trash/Current
drwx------ - root supergroup 0 2019-02-25 14:29 /user/root/.Trash/Current/input
-rw-r--r-- 3 root supergroup 280 2019-02-25 13:40 /user/root/.Trash/Current/input/1.txt

通过WebUI查看,禁止访问用户目录。因为使用时WebUI,用户默认是dr.who。一般文件和目录对于other用户都有读权限,但是用户目录禁止other用户访问

一种方法是修改user目录的mode属性,但不是很妥当。可以修改 etc/hadoop/core-site.xml

1
2
3
4
5
<property>
<!-- WebUI的用户 -->
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>

重启HDFS

1
2
stop-dfs.sh
start-dfs.sh

可以通过WebUI查看了

一分钟后,回收站中Current中的数据就消失了

但是数据并不是完全消失,而是会在.Trash目录下生成另一个名为yyyyMMddHHmmss的目录,将数据移动到该目录下。

经过一段时间后,yyyyMMddHHmmss目录也会消失。

1.3. 清空回收站

执行以后命令,会立即清空.Trash/Current目录,将文件移动到yyyyMMddHHmmss目录下,经过一段时间,yyyyMMddHHmmss目录被HDFS消除。

1
hdfs dfs -expunge
panchaoxin wechat
关注我的公众号
支持一下