使用Kerberos的Hive远程Metastore

时间:2013-08-29 17:45:04

标签: hadoop hive

我是hive的新手,并试图以相对安全的方式为测试环境进行设置。我想使用远程Metastore,因此MR作业可以访问数据库。我似乎有一些工作,但当有凭证的用户尝试创建数据库时,我得到:

hive> show databases;
OK
default
hive> create database testdb;
FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException User: hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM is not allowed to impersonate myuserid@SUB.DOM.COM)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

我可以运行'show databases'了。我以hdfs / hadoopserver.sub.dom.com@SUB.DOM.COM作为主体运行hdfs的“hive --service metastore”。我在同一个盒子上运行蜂巢作为“myuserid”。我不知道它是否相关,但如果我尝试从另一个系统运行配置单元,我会收到GSS启动错误,除非我使用相同的主体(hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM)进行配置.metastore.kerberos.principal。这是预期的吗?

当我尝试谷歌搜索时,我看到类似的问题,但是他们关于无法模仿的消息只显示了单个部分的用户名,在这里我显示了这个领域。我尝试使用auth_to_local属性,但它没有帮助。 Map Reduce和HDFS操作正常运行。

在core-site.xml中我有:

<property>
  <name>hadoop.proxyuser.hdfs.hosts</name>
  <value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.hdfs.groups</name>
  <value>*</value>
</property>

在hive-site.xml中我有:

<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost/metastore</value>
  <description>the URL of the MySQL database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
</property>

<property>
  <name>datanucleus.autoCreateSchema</name>
  <value>false</value>
</property>

<property>
  <name>datanucleus.fixedDatastore</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://hadoopserver.sub.dom.com:9083</value>
</property>

<property>
  <name>hive.security.authorization.enabled</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.sasl.enabled</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.kerberos.keytab.file</name>
  <value>/etc/hadoop/hdfs.keytab</value>
</property>

<property>
  <name>hive.metastore.kerberos.principal</name>
  <value>hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM</value>
</property>

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

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

以用户“hive”(hive / domain @ Realm)运行hive Metorore,然后将hadoop.proxyuser.hive.hosts和hadoop.proxyuser.hive.groups配置为'*'。 这很有效。

答案 1 :(得分:0)

一旦你在core-site.xml中添加了代理配置,例如hadoop.proxyuser.hdfs.groups,其中hdfs是启动hiveserver的用户,然后添加hive.server2.enable.doAs = false来模仿其他用户/组