来源于 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会从内核优化该问题。