2013-08-29 57 views
2

我是新來的配置單元,並嘗試以相對安全的方式爲測試環境設置它。我想使用遠程元數據,因此MR作業可以訪問數據庫。我似乎有事情幾乎工作,但與一個證書的用戶嘗試創建一個數據庫,我得到:使用Kerberos的Hive Remote Metastore

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 

我可以運行「顯示數據庫」 OK。我有一個「hive --service metastore」作爲hdfs以hdfs/[email protected]作爲主體運行。我在同一個盒子上運行配置爲「myuserid」的配置單元。我不知道它是否有關係,但如果我嘗試從另一個系統運行配置單元,我會得到一個GSS啓動錯誤,除非我爲配置單元使用相同的主體(hdfs/[email protected]) .metastore.kerberos.principal。這是預期的嗎?

當我嘗試使用Google搜索時,發現類似的問題,但他們關於不能模擬的消息只顯示單個部件用戶名,對我來說顯示的是領域。我試着玩auth_to_local屬性,但沒有幫助。 Map Reduce和HDFS操作正常。

在覈心的site.xml我:

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

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

在蜂房的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> 

任何想法?

回答

0

以用戶「配置單元」(hive/domain @ Realm)運行配置單元Metastore,然後將hadoop.proxyuser.hive.hosts和hadoop.proxyuser.hive.groups配置爲'*'。 這有效。

+0

這並沒有真正回答這個問題。如果您有不同的問題,可以通過單擊[提問](http://stackoverflow.com/questions/ask)來提問。您還可以[添加賞金](http://stackoverflow.com/help/privileges/set-bounties)在您擁有足夠的[聲譽](http://stackoverflow.com/help/)時吸引更多人關注此問題什麼聲譽)。 – Nalaka526

0

一旦您在core-site.xml中添加了代理配置,例如hadoop.proxyuser.hdfs.groups,其中hdfs是啓動hiveserver的用戶,然後添加hive.server2.enable.doAs = false以模擬其他用戶/組。

+0

如果將doas設置爲false,則所有安全性都會關閉,因爲所有查詢都將以用戶配置單元的形式執行。 – BorderStark

相關問題