正常在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