使用Kerberos设置Hive Remote Metastore

我是新来蜂巢,并试图build立一个相对安全的方式为testing环境。 我想使用远程元数据,因此MR作业可以访问数据库。 我似乎有东西几乎工作,但是当拥有凭证的用户尝试创build数据库时,我会得到:

hive> show databases; OK default hive> create database testdb; FAILED: Error in metadata: MetaException(message:Got exception: org.apache.hadoop.ipc.RemoteException User: hdfs/[email protected] is not allowed to impersonate [email protected]) FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 

我可以运行'显示数据库'确定。 我有一个“hive –service metastore”作为hdfs以hdfs / [email protected]作为主体运行。 我在同一个盒子上运行configuration为“myuserid”。 我不知道它是否相关,但如果我尝试从另一个系统运行configuration单元,我得到一个GSS启动错误,除非我使用相同的主体(hdfs / [email protected])configuration单元.metastore.kerberos.principal。 这是预期的吗?

当我尝试使用谷歌search这个我看到类似的问题,但他们的消息不能模仿只显示单个部分的用户名在哪里它显示的领域。 我试着玩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/[email protected]</value> </property> <property> <name>hive.metastore.execute.setugi</name> <value>true</value> </property> 

有任何想法吗?

显然,它不喜欢使用hdfs原则。 切换到专门针对蜂巢的原则解决了这个问题。