[英]Hive Remote Metastore With Kerberos
我是蜂巢的新手,正在嘗試以相對安全的方式針對測試環境進行設置。 我想使用遠程元存儲,以便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
我可以運行“顯示數據庫”。 我有以hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM作為主體的hdfs運行的“配置單元--service metastore”。 我在同一框上以“ myuserid”運行配置單元。 我不知道它是否相關,但是如果我嘗試從另一個系統運行hive,除非我對hive使用相同的主體(hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM),否則會收到GSS Initiate錯誤。 .metastore.kerberos.principal。 那是預期的嗎?
當我嘗試使用Google進行搜索時,會看到類似的問題,但是他們提示無法模擬的消息僅顯示了單個部件的用戶名,而對於我來說,這是顯示領域的位置。 我嘗試使用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>
有任何想法嗎?
以用戶“ hive”(hive / domain @ Realm)的身份運行hive metastore,然后將hadoop.proxyuser.hive.hosts和hadoop.proxyuser.hive.groups配置為“ *”。 這可行。
一旦您在core-site.xml中添加了代理配置,例如hadoop.proxyuser.hdfs.groups,其中hdfs是啟動hiveserver的用戶,然后添加hive.server2.enable.doAs = false來模擬其他用戶/組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.