无法用Hive绑定哨兵

az31mfrm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(430)

这个帖子是关于用Hive绑哨兵的。我面对这个问题已经有一段时间了。
我的主要目标是提供对数据库和表的访问,这些数据库和表在创建角色时被授予特权。
因此,首先,我在cloudera管理器中启用了sentry并重新启动了服务器,然后我创建了角色并在beeline中授予特权,如下所示-

CREATE ROLE role1;
GRANT ROLE role1 TO GROUP hive;
GRANT SELECT ON DATABASE db1 TO ROLE role1;
GRANT ALL ON URI 'file:///path/to/hive-udfs.jar' TO ROLE role1;
SET ROLE role1;
SHOW CURRENT ROLES;

现在如果我执行下面的命令 beeline ,我只看到 DEFAULT 数据库和 DB1 数据库是好的

SHOW DATABASES;

当我使用代码创建 SentryHiveMetaStoreClient 并访问其方法,如- getAllDatabases() 或者 getAllTables("table_name") . 这里我得到一个错误:

Caused by: java.lang.NullPointerException
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getConf(SentryHiveMetaStoreClient.java:161)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getHiveAuthzBinding(SentryHiveMetaStoreClient.java:135)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.filterDatabases(SentryHiveMetaStoreClient.java:98)
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient.getAllDatabases(SentryHiveMetaStoreClient.java:65)
at my.data.in.hive.resources.MetadataResource.getDatabase(MetadataResource.java:46)

我面临的另一个问题是,当我创建 HiveMetaStoreClient 并访问其方法,如 getAllDatabases() 它向我展示了所有的数据库都抛弃了各种角色赋予特权的概念,这很好。但如果我访问它的方法- listRoleNames() ,我得到管理和公共。这不应该给出我在其中创建的角色的名称吗 beeline 即。 role1 ?
可能在cloudera manager中配置sentry和hive有问题,或者我可能做错了什么。有什么办法让它发挥作用吗?

bjp0bcyl

bjp0bcyl1#

关于你的问题
可能在配置岗哨和Hive时有问题。。。
以及给定的错误消息

Caused by: java.lang.NullPointerException
at org.apache.sentry.binding.metastore.SentryHiveMetaStoreClient ...

您可以检查绑定配置是否正确。可以从配置sentry开始,为不同的用户显示/隐藏不同的数据库。

相关问题