记一次Hive库里手动删除表,但是HDFS上还存在表文件奇怪问题

正常在hive库即hive命令行中删除一张表,hdfs上也是同步的被删除的,但是这次发现在hive里手动建了一张表,然后使用drop table 表名后,hive库里的确没发现这张表了,但是HDFS上还是有。

我使用的建表建库语句:

create database test1 location 'hdfs://beh/user/test1/test1.db';   //创建库指定路径
use test1;
create table test1(id int);

删除表的语句:

drop table test1;

不是外部表,并且回收站中也没有该表被删除的信息。

经百度,说是由于Hive权限与HDFS权限分离导致的原因,即Hive权限管理比较弱,/user目录权限为700:

参考网址:https://cloud.tencent.com/info/dfa3e02544bec8e457628fa982e10434.html

但我看了一下,我自己的权限为755,是足够的:

最终我的解决办法是:

(1)对HDFS重新赋权

hadoop fs -chown -R test:test /user/test

hadoop fs -setfacl -R -m user:test:rwx /user/test

(2)重新新建了一个test1表,然后重新删除,发现hive库和hdfs上都删除了。

之后新建的表的结构信息为:

感觉应该是hive元数据库、hive库、hdfs之间出现了一些问题,因为我发现hive元数据库里是还有test1表的元信息的,即在hive库中删除表后,hive元数据库和hdfs中test1表的信息都没有被清除。如果有大神知道具体原因,还请指点^.^

附一个Hive drop table的流程:

0.删除metadata

1.如果没有启用trash则直接删除hdfs文件

2.如果启用trash:

a)如果trash目录无权限访问(默认/user/<username>/.trash)文件则成为“僵尸”文件,永远保留在那里

b)否则若用hive command执行或hiveserver开启了impersonation则将文件移动到/user/<username>/.trash下,否则移动到/user/<hiveserver runner>/.trash下

参考网址:

https://cloud.tencent.com/info/dfa3e02544bec8e457628fa982e10434.html

猜你喜欢

转载自blog.csdn.net/qq_34477362/article/details/83750659