Назад | Перейти на главную страницу

Настройка удаленного хранилища метастазов Hive с помощью 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

Я могу запустить "показать базы данных" нормально. У меня есть "hive --service metastore", работающий как hdfs с hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM в качестве основного. Я запускаю улей как "myuserid" на том же самом ящике. Я не знаю, связано ли это, но если я пытаюсь запустить куст из другой системы, я получаю ошибку GSS Initiate, если только я не использую тот же принципал (hdfs/hadoopserver.sub.dom.com@SUB.DOM.COM) для улья .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>

Любые идеи?

Видимо, не любит принцип hdfs. Переход к принципу специально для улья решил проблему.