无法将Sentry与Hive绑定

时间:2017-09-21 09:01:22

标签: apache hadoop hive cloudera sentry

这篇文章是关于将Sentry与Hive绑定的。我一直面对这个问题。

我的主要目标是提供对创建角色时获得权限的数据库和表的访问。

首先,我在Cloudera Manager中启用了Sentry并重新启动了服务器 然后我创建了角色,并在下面给出了直线特权 -

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可能存在一些问题,或者我可能做错了什么。关于如何使其发挥作用的任何想法?

1 个答案:

答案 0 :(得分:0)

关于你的问题

  

配置Sentry和Hive可能存在一些问题...

和给定的错误消息

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

您可以检查绑定是否正确配置。起点可以是Configure Sentry to show/hide different databases for different users