Hive Server2 未模拟 HDFS

Hive Server2 未模拟 HDFS

我正在尝试使用基于存储的安全性来保护 Hive。我正在使用 Kerberos 和 LDAP。

我想要的是让 Hive 以用户(及其主要组)的身份在 HDFS 中创建目录和文件。这样,我希望根据组成员身份限制对数据库的访问。

因此,例如当我使用 kinit(import@REALM)通过 Kerberos 以用户“import”(在“imports”组中)进行身份验证并运行 beeline“CREATE DATABASE test;”时,我希望看到:

drwxr-x---   - import     imports             0 2015-08-28 10:16 /user/hive/warehouse/test.db

但我得到的是:

drwxr-x---   - hive       data                0 2015-08-28 10:16 /user/hive/warehouse/test.db

注意仓库目录权限为:

drwxrwxr-t   - hive       data                0 2015-08-28 11:14 /user/hive/warehouse

我还注意到,当我使用手动更改所有权时,hadoop fs -chown我仍然可以删除不属于我的数据库!此外,当我使用时,hadoop put我获得了正确的权限。

这在 Hive 中可能吗?

我当前的配置是:

核心站点.xml:

<property>
    <name>hadoop.security.authentication</name>
    <value>kerberos</value>
</property>
<property>
    <name>hadoop.security.authorization</name>
    <value>true</value>
</property>

<property>
    <name>hadoop.proxyuser.hive.hosts</name>
    <value>localhost,master.dev.data</value>
</property>
<property>
    <name>hadoop.proxyuser.hive.groups</name>
    <value>*</value>
</property>

hdfs-site.xml:

<property>
    <name>fs.permissions.umask-mode</name>
    <value>027</value>
</property>

配置单元-site.xml:

<property>
    <name>hive.warehouse.subdir.inherit.perms</name>
    <description>true if table directories should inherit the permissions of the warehouse or database directory instead of being created with permissions derived from dfs umask</description>
    <value>false</value>
</property>

<property>
    <name>hive.metastore.pre.event.listeners</name>
    <value>org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>
</property>

<property>
    <name>hive.security.metastore.authenticator.manager</name>
    <value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
</property>

<property>
    <name>hive.security.metastore.authorization.manager</name>
    <value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
</property>

<property>
    <name>hive.security.metastore.authorization.auth.reads</name>
    <value>true</value>
</property>

<property>
    <name>hive.metastore.execute.setugi</name>
    <value>true</value>
</property>

<property>
    <name>hive.server2.enable.doAs</name>
    <value>true</value>
</property>

我省略了 Kerberos 密钥表/主体配置,但 Hive Server2 和 Metastore 正在使用“hive/master.host@REALM”主体,并且 Yarn/HDFS 也启用了 Kerberos;所有节点都从 LDAP 获取密码/组。

版本:

hadoop-0.20-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-client-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-hdfs-namenode-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-mapreduce-historyserver-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hadoop-yarn-resourcemanager-2.6.0+cdh5.4.4+597-1.cdh5.4.4.p0.6.el6.x86_64
hive-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-jdbc-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-metastore-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch
hive-server2-1.1.0+cdh5.4.4+157-1.cdh5.4.4.p0.6.el6.noarch

答案1

您可以尝试hiveserver2从嵌入式元存储开始吗?

hiveserver2 -hiveconf hive.metastore.uris=' ' ..

这可能是一种解决方法,并且它会判断这是否是仅在远程元存储模式下的错误。

(由于历史原因,在 Hortonworks 我们坚持在 HS2 的嵌入模式下使用元存储,并且我们的系统测试也在该模式下运行。我在该模式下没有看到过这个问题)。

相关内容