簡體   English   中英

具有Kerberos的Hive遠程元存儲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM