來源於 https://www.aboutyun.com/thread-19977-1-1.html
hive常見錯誤匯總
1安裝與啟動
1.1 Hive安裝失敗報register service defaultUser failed.
1.2Hive啟動失敗
2 JDBC客戶端
2.1 使用jdbc 客戶端連接hiveserver 報Login failure for user from keytab conf/user.keytab
2.2 使用jdbc 客戶端連接hiveserver 報KeeperErrorCode = AuthFailed for /hive/active_hive
2.3 使用beeline客戶端連接hiveserver 報KeeperErrorCode = Session expired for /hive/active_hive
2.4 使用jdbc客戶端連接hiveserver 報faild to parse url: url , format is wrong.
2.5 非安全版本的集群beeline客戶端連接不上HiveServer報 ERROR client.ZooKeeperSaslClient: SASL authentication failed
3 OM監控與告警.
3.1 Hive服務狀態為Bad
3.2 Hive服務狀態為Partially Healthy
3.3 Hive服務狀態為 Unknown
3.4 hiveserver 或者metastore 實例的健康狀態為unknown
3.5 hiveserver 或者metastore 實例的健康狀態為Concerning
3.6 Hive服務健康狀態和Hive實例健康狀態的區別
3.7 Hive中的告警有哪些以及觸發的場景
Alarm ID
|
Alarm Severity
|
Is Auto Clear
|
Alarm Name
|
Alarm Type
|
16000
|
Minor
|
TRUE
|
Percentage of Sessions Connected to the HiveServer to Maximum Number Allowed Exceeds the Threshold
|
故障告警
|
16001
|
Minor
|
TRUE
|
Hive Warehouse Space Usage Exceeds the Threshold
|
故障告警
|
16002
|
Minor
|
TRUE
|
The Successful Hive SQL Operations Lower than The Threshold
|
故障告警
|
16003
|
Minor
|
FALSE
|
HiveServer Failover
|
事件
|
16004
|
Critical
|
TRUE
|
Hive Service Unavailable
|
故障告警
|
4 HQL與鑒權
4.1 在beeline中執行dfs put /opt/kv1.txt /tmp/kv1.txt類似的上傳命令時報Permission denied. Principal [name=admin, type=USER] does not have following privileges on Object [type=COMMAND_PARAMS,name=[put, /opt/kv1.txt, /tmp/kv1.txt]] for operation DFS : [ADMIN PRIVILEGE] (state=,code=1)
4.2 執行create table test(bar int,foo string)stored as textfile類似建表語句報Permissiondenied:user=fantasy,access=EXECUTE,inode="/user/hive":hive:hive:drwxrwx---
4.3 執行load data inpath '/tmp/kv1.txt' into table xx 類似的導入數據的語句報HiveAccessControlException Permission denied. Principal [name=fantasy, type=USER] does not have following privileges on Object [type=DFS_URI, name=hdfs://hacluster/tmp/kv1.txt] for operation LOAD : [SELECT, INSERT, DELETE, OBJECT OWNERSHIP] (state=42000,code=40000)
4.4 create external table xx(xx int)stored as textfile location '/tmp/aaa/aaa';創建外部表時指定一個不存在的路徑報Permission denied. Principal [name=fantasy, type=USER] does not have following privileges on Object [type=DFS_URI, name=/tmp/aaa/aaa] for operation CREATETABLE : [SELECT, INSERT, DELETE, OBJECT OWNERSHIP] (state=42000,code=40000)
4.5 load數據的時候對文件名是否有要求
4.6 執行set命令的時候報Cannot modify hive.default.rcfile.serde at runtime.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HQL中路徑的權限要求
在FusionInsight C30安全版本中,Hive使用“SQL Standards Based”鑒權模式完成鑒權操作。在這種模式下,對HQL中涉及的路徑有權限要求,現將部分要求總結如下,供使用時參考。
1 加載HDFS上的文件
load data inpath ‘file’ ……
l 文件的owner需要為執行命令的用戶
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=hdfs://hacluster/tmp/input/mapdata] for operation LOAD : [OBJECT OWNERSHIP]
l 當前用戶需要對該文件有讀、寫權限
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=hdfs://hacluster/tmp/input/mapdata] for operation LOAD : [INSERT, DELETE]
l 當前用戶需要對該文件的目錄有執行權限
校驗不通過時的錯誤信息
SemanticException Line 1:17 Invalid path ''/tmp/input/mapdata''
l 由於load操作會將該文件移動到表對應的目錄中,所以要求當前用戶需要對該文件的目錄有寫權限
校驗不通過時的錯誤信息
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
l 要求文件的格式與表指定的存儲格式相同。如創建表時指定stored as rcfile,但是文件格式為txt,則不符合要求。
校驗不通過時的錯誤信息
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
注意:創建表時如果沒有指定存儲格式,則默認為rcfile。
l 文件必須是HDFS上的文件,不可以用file://的形式指定本地文件系統上的文件
校驗不通過時的錯誤信息
SemanticException [Error 10028]: Line 1:17 Path is not legal ''file:///tmp/input/mapdata'': Move from: file:/tmp/input/mapdata to: hdfs://hacluster/user/hive/warehouse/tmp1 is not valid. Please check that values for params "default.fs.name" and "hive.metastore.warehouse.dir" do not conflict.
l 文件名不能以下橫線(_)或點(.)開頭,以這些開頭的文件會被忽略
2 加載操作系統(本地文件系統)上的文件
load data local inpath ‘file’ ……
l 由於所有的命令都是發送的主HiveServer上去執行的,所以要求此文件在主HiveServer節點上
校驗不通過時的錯誤信息
SemanticException Line 1:23 Invalid path ''/tmp/input/mapdata'': No files matching path file:/tmp/input/mapdata
l HiveServer進程是以操作系統上的omm用戶啟動的,所以要求omm用戶對此文件有讀權限,對此文件的目錄有讀、執行權限
校驗不通過時的錯誤信息
SemanticException Line 1:23 Invalid path ''/tmp/input/mapdata'': No files matching path file:/tmp/input/mapdata (對目錄沒有權限)
或者是
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.CopyTask
(對文件沒有權限)
l 文件的owner需要為執行命令的用戶
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/input/mapdata] for operation LOAD : [OBJECT OWNERSHIP]
l 當前用戶需要對該文件有讀、寫權限
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/input/mapdata] for operation LOAD : [SELECT, INSERT, DELETE]
l 要求文件的格式與表指定的存儲格式相同。如創建表時指定stored as rcfile,但是文件格式為txt,則不符合要求。
校驗不通過時的錯誤信息
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
注意:創建表時如果沒有指定存儲格式,則默認為rcfile。
l 文件名不能以下橫線(_)或點(.)開頭,以這些開頭的文件會被忽略
3 將查詢結果寫入到HDFS上
insert overwrite directory ‘dir’ ……
u 如果目錄不存在
l 要求對此目錄的父目錄有讀、寫、執行權限
校驗不通過時的錯誤信息
HiveAuthzPluginException Error getting permissions for /tmp/out/abc: Permission denied: user=user1, access=EXECUTE, inode="/tmp/out":admin:hive:drwxr-----
或者是
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=/tmp/out/abc] for operation QUERY : [INSERT]
u 如果目錄存在
l 要求對此目錄有讀、寫、執行權限(如果此目錄下有子目錄或子文件,要求對子目錄有讀、寫、執行權限,對子文件有寫權限)
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=DFS_URI, name=/tmp/out/abc] for operation QUERY : [INSERT]
或者是
HiveAuthzPluginException Error getting permissions for /tmp/out/abc: Permission denied: user=user1, access=READ_EXECUTE, inode="/tmp/out/abc/aaa":admin:hive:drwxrw----
(對子目錄沒有執行權限)
l 由於會先將此目錄刪掉,所以要求對此目錄的父目錄有讀、寫、執行權限
校驗不通過時的錯誤信息
HiveAuthzPluginException Error getting permissions for /tmp/out/abc: Permission denied: user=user1, access=EXECUTE, inode="/tmp/out":admin:hive:drwxr-----
(對父目錄沒有執行權限)
或者是
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
(對父目錄沒有寫權限)
4 將查詢結果寫入到操作系統(本地文件系統)上
insert overwrite local directory ‘dir’ ……
l 注意:dir必須加上file://前綴,否則會有很多權限不正確的錯誤
l 由於所有的命令都是發送的主HiveServer上去執行的,所以要求此目錄在主HiveServer節點上
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out] for operation QUERY : [INSERT]
u 如果目錄不存在
l HiveServer進程是以操作系統上的omm用戶啟動的,所以要求omm用戶對此目錄的父目錄有讀、寫、執行權限
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out/1] for operation QUERY : [INSERT]
l 要求當前操作用戶對指定目錄的父目錄有寫權限
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out/2] for operation QUERY : [INSERT]
l 如果父目錄中還有其他目錄或文件,則要求omm用戶對這些目錄有讀、寫、執行權限,對這些文件有寫權限,同時當前操作的用戶對這些目錄和文件有寫權限
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out/2] for operation QUERY : [INSERT]
u 如果目錄存在
l HiveServer進程是以操作系統上的omm用戶啟動的,所以要求omm用戶對此目錄有讀、寫、執行權限(如果此目錄下有子目錄或子文件,要求對子目錄有讀、寫、執行權限,對子文件有寫權限)
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out/2] for operation QUERY : [INSERT]
l 要求當前操作用戶對指定目錄有寫權限(如果此目錄下有子目錄或子文件,要求對這些目錄/文件有寫權限)
校驗不通過時的錯誤信息
HiveAccessControlException Permission denied. Principal [name=user1, type=USER] does not have following privileges on Object [type=LOCAL_URI, name=file:/tmp/out/2] for operation QUERY : [INSERT]
l 由於會先將此目錄刪掉,所以要求對此目錄的父目錄有讀、寫、執行權限
校驗不通過時的錯誤信息
Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
大並發的beeline連接,關閉,連接,其中使用udf, add jar, using jar兩種方式會從hdfs下載jar包,new ClassLoader加載這個jar包
在加載這個jar包的時候 會用到jvm里一個全局的stream,關閉beeline的時候 會關閉這個classloader,關閉這個classloader的時候會關閉這個stream,其他線程還在使用。。然后就掛了。
修改規避方式是將udf包放到hive的lib下,然后加入aux path,再直接添加,就避免了這個過程。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hive在編譯階段是串行的,編譯開始時會加鎖保護,對於其他等候執行命令的語句只能排隊等候。正常情況一條SQL語句的編譯階段會在數秒內返回。
但是由於編譯最后階段會進行鑒權,此處有個坑,既,如果在創建表的時候指定路徑並且路徑下有大量文件的話,鑒權會用很長時間。這就會讓其他語句由於不能獲取鎖而卡死。
可以先把數據目錄rename成別的目錄,等創建好表之后,再rename回來。
后續Hive會從內核優化該問題。