使用哨兵配置配置单元:NullPointerException privilegeObj 为空

Config hive with sentry: NullPointerException privilegeObj is null for

我已经按照 the guide 一步一步来了。但是当我尝试向角色授予权限时发生错误:

0: jdbc:hive2://localhost:10000/> GRANT ALL ON SERVER server1 TO ROLE admin_role;
Error: Error while compiling statement: FAILED: NullPointerException privilegeObj is null for 
TOK_GRANT
   TOK_PRIVILEGE_LIST
      TOK_PRIVILEGE
         TOK_PRIV_ALL
   TOK_PRINCIPAL_NAME
      TOK_ROLE
         admin_role
   TOK_PRIV_OBJECT
      TOK_SERVER_TYPE
         server1 (state=42000,code=40000)

我是beeline as hive登录的,密码正确,创建角色ok,可以看到角色:

0: jdbc:hive2://localhost:10000/> show roles;
+-------------+--+
|    role     |
+-------------+--+
| test        |
| admin_role  |
+-------------+--+

但我无法获得当前角色:

0: jdbc:hive2://localhost:10000/> show current roles;
+-------+--+
| role  |
+-------+--+
+-------+--+

此查询列出了分配给已登录用户组的所有角色:

SHOW CURRENT ROLES;

我猜,在你的情况下,用户配置单元属于组配置单元(组在 hdfs 权限的含义)。您可以查看组 hive 被授予了哪些角色:

SHOW ROLE GRANT GROUP hive;

如果您没有看到admin_role,您可以通过以下语句授予它:

GRANT ROLE admin_role TO GROUP hive;

找到原因:

hive-exec.jar 的 sentry 和 hive 来自不同的版本。常量,例如:TOK_PRIV_OBJECT,在两个jar中有不同的值。

真的很棘手!