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