場景,開發用java程序鏈接presto建立一個表,這個表在hdfs的權限爲:java
而後用presto去刪除這個表測試
報錯,沒有權限刪除,查看上一級目錄權限,發現權限正常3d
直連hive刪表rest
發現正常. 而後使用developer直連hive 建立表,用presto刪除仍是報錯沒有權限。blog
鏈接hive 元數據MySQL 開發
select t.OWNER, p.PRINCIPAL_NAME, count(1) from TBLS t join TBL_PRIVS p on p.TBL_ID=t.TBL_ID group by t.OWNER, p.PRINCIPAL_NAME;class
查看錶的屬主 select OWNER ,TBL_NAME from TBLS where TBL_NAME="t_5d550e8bce6a1952f8a8af7c" ;配置
再次用presto(jmx.configure select
)建立表權限
發現 common對應的count增長了,可是developer的沒有增長。
問題就明瞭了。 presto默認是以啓動presto的用戶來作hive元數據的也就是這裏的common用戶, 可是存儲用戶是以jmx.configure 裏面配置的用戶來設定的。因此 在presto裏面(developer用戶進入)刪除這個表會提示權限不夠
解決方法修改 jmx.config
而後以common用戶啓動presto
最新結論
presto 有兩個用戶配置
第一個是 這個配置影響的是數據 在hdfs裏面寫入的屬主
第二個是
這個配置目前測試並無什麼用!!!
另外 java程序的配置文件 以及你本地鏈接presto用的是什麼用戶 那麼這個用戶就是 hive裏面建立的表的元數據的屬主。
查看錶的屬主 select OWNER ,TBL_NAME from TBLS where TBL_NAME="t_5d550e8bce6a1952f8a8af7c" ;