Hadoop有一个“垃圾回收站”的功能,用于恢复在过去一段时间内被删除文件。若某个文件被删除了多次,你还可以恢复具体哪一次删除的文件。该功能默认是关闭状态,若想开启,需要在$HADOOP_HOME/etc/hadoop/core-site.xml文件中,添加以下配置:
<property>
<name>fs.trash.interval</name>
<value>10</value>
</property>
上面的配置意思为:Hadoop会设立一个回收站,回收站每隔10分钟清空一次。
若在一个回收周期内多次删除同一个文件或目录,则Trash内会分版本保存你每次删除的文件。这就意味你可以恢复在某个时刻所删除的文件。
举个例子:
时间点 | 动作 | Trash内容 |
12:40 | 回收站清空 | empty |
12:41 | 删除fruit.data | fruit.data |
12:42 | 重新上传fruit.data且再次删除fruit.data | fruit.data,fruit.data1446352935186 |
12:45 | 重新上传fruit.data且再次删除fruit.data | fruit.data,fruit.data1446352935186,fruit.data1446353100390 |
12:50 | 回收站清空 | empty |
根据上表,在12:41第二次删除friut.data,回收站中出现了fruit.data1446352935186,后面的那串数字就是你删除时刻的时间戳。那么我们就可在垃圾回收站清空之前,恢复12:41或12:45删除的文件。
结合hive的使用,一般会有很多定时任务向hive中插入更新数据,那么.Trash中针对某个table就会有很多个版本的存在,若想查看某个时刻的数据,只要在Trash中把该时间的数据恢复即可,针对误删特别有用。