由于hive对hive表的管理实质上就是管理hdfs目录,因此相对来说垃圾回收相对来说比较简单
1.hive 外部表的删除
由于外部表不由hive管理,因此,在hive里面删除外部表,删除的仅仅是hive的元数据,原始数据还存在hdfs上,所以对于外部表而言,只需要重建一下表,然后重新装载一下数据即可。
2.hive 内部表的删除
由于hive内部表的管理者是hive,因此,hive的内部表删除了,就真的删除了。
3.hive的垃圾回收机制(实际上是hdfs的垃圾回收机制)
实际上默认hdfs的垃圾回收机制是没有开启的,我们可以通过配置开启垃圾回收
修改hadoop的配置文件core-site.xml
:(添加配置)
<property>
<name>fs.trash.interval</namename>
<value>0</value> <!-- 回收站清理的间隔时间,单位为分钟,默认为0,即删除hdfs文件不走回收站 -->
</property>
<property>
<name>fs.trash.interval</namename>
<value>0</value> <!-- 检查点的时间间隔,单位分钟,默认为0,即取上面的值,可以不设置,即0,保持和上面的参数一致 -->
</property>
注:如果你的hadoop集群现在开启状态,可不必重启,但是要测试的话,一定要先退出当前hive客户端重进
:
默认的垃圾回收站目录
:
/user/hadoop/.Trash/Current
还原:(比如我现在删除了hdfs上文件/mkmg/mktest/123.txt)
hdfs dfs -mv /user/hadoop/.Trash/Current/mkmg/mktest/123.txt /home/hadoop/xxxx/123.txt