1. 程式人生 > >記一次Hive庫裡手動刪除表,但是HDFS上還存在表文件奇怪問題

記一次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