您好,登錄后才能下訂單哦!
這篇文章主要介紹了開啟Sentry后LOAD DATA異常怎么辦,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
問題描述
在開啟了Sentry的CDH集群中,Hive或Impala的操作會受Sentry的管理,不同的操作需要不同的權限。例如,要在Hive中執行ALTER DATABASE命令,用戶需要擁有SERVER或DATABASE的ALL權限。本文是描述關于LOAD DATA的異常,我們先來看看Cloudera官網對于這一塊的描述:
具體請參考:
https://www.cloudera.com/documentation/enterprise/5/latest/topics/cm_sg_sentry_service.html#sentry_service
可以看出如果需要LOAD DATA操作,則需要具有ALL或者INSERT權限。本文Fayson描述雖然對于Database賦予了ALL權限,但依舊會報錯沒有load data 權限異常。
測試環境
1.CM和CDH版本為5.15.1
2.操作系統版本為RedHat7.2
3.集群已啟用Kerberos
4.已啟用Sentry
以下具體描述該問題,使用以下命令load data到Hive表中,提示user test_sjz does not have privileges for LOAD
use test_sjz;
#加載HDFS中數據到hive表
load data inpath ‘/user/test_sjz/super_store.csv’ into table super_store;
#加載本地數據到hive表
load data local inpath ‘/user/test_sjz/super_store.csv’ into table super_store;
查看test_sjz 用戶組的權限,發現是具有test_sjz 庫的all 權限的,即表示test_sjz 能使用load data 命令
show grant role test_sjz;
看到提示另一個異常,提示:this required privileges:Server=server1 ….
,于是嘗試給HDFS非/user/<username> 目錄和文件授權后嘗試
發現依舊不能load data。
2
問題解決
原因在于Sentry將檢查 LOAD DATA 語句源文件和目標表。需要目標表上的INSERT和源文件上的URI權限.
即需要將Sentry中的URI權限授予用戶主目錄(/ user / <username>)的活動用戶。如果用戶需要從HDFS中加載數據的其他目錄的數據,則還必須授予用戶在Sentry中的URI權限。授權語法如下:
GRANT ALL ON URI “hdfs://namenode:8020/user/<name> /” TO ROLE <role>;
注:如果你啟用的NameNode的HA,建議使用Nademode 的Nameservice 來代替主機名和端口號,這可確保即使NameNode更改,URI也將保持不變。如下圖紅線圈出的部分所示:
登錄hive用戶,給/user/test_sjz 目錄授權后嘗試
GRANT ALL ON URI “hdfs://namenode:8020/user/<name> /” TO ROLE <role>;
然后load data 成功
use test_sjz;
#加載HDFS中數據到hive表
load data impath ‘/user/test_sjz/super_store.csv’ into table super_store;
#加載本地數據到hive表
load data local impath ‘/user/test_sjz/super_store.csv’ into table super_store;
感謝你能夠認真閱讀完這篇文章,希望小編分享的“開啟Sentry后LOAD DATA異常怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。