Программа Spark внутренне вызывает HDFS: / apps / hive / warehouse - PullRequest
0 голосов
/ 27 июня 2018

Сценарий / Детали кода


Я создаю объект сеанса искры для хранения данных в таблице кустов, как:

_sparkSession = SparkSession.builder().
                    config(_sparkConf).
                    config("spark.sql.warehouse.dir", "/user/platform").
                    enableHiveSupport().
                    getOrCreate();

После развертывания JAR на сервере я получаю исключение:

Caused by: org.apache.spark.sql.AnalysisException:
org.apache.hadoop.hive.ql.metadata.HiveException:
MetaException(message:org.apache.hadoop.security.AccessControlException:
Permission denied: user=diplatform, access=EXECUTE,
inode="/apps/hive/warehouse":hdfs:hdfs:d---------
        at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:353)

В моем hive-site.xml ниже приведены настройки. Мы добавляем этот xml к нашему искровому коду, чтобы можно было переопределить xml по умолчанию в / etc / hive / conf:

<property>
  <name>hive.security.metastore.authenticator.manager</name>
  <value>org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator</value>
</property>

<property>
  <name>hive.security.metastore.authorization.auth.reads</name>
  <value>false</value>
</property>

<property>
  <name>hive.security.metastore.authorization.manager</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider</value>
</property>

<property>
  <name>hive.metastore.authorization.storage.checks</name>
  <value>false</value>
</property>

 <property>
  <name>hive.metastore.cache.pinobjtypes</name>
  <value>Table,Database,Type,FieldSchema,Order</value>
</property>

    <property>
  <name>hive.metastore.client.connect.retry.delay</name>
  <value>5s</value>
</property>

<property>
  <name>hive.metastore.client.socket.timeout</name>
  <value>1800s</value>
</property>

<property>
  <name>hive.metastore.connect.retries</name>
  <value>24</value>
</property>

 <property>
  <name>hive.metastore.execute.setugi</name>
  <value>true</value>
</property>

 <property>
  <name>hive.metastore.failure.retries</name>
  <value>24</value>
</property>

<property>
  <name>hive.metastore.kerberos.keytab.file</name>
  <value>/etc/security/keytabs/hive.service.keytab</value>
</property>

<property>
  <name>hive.metastore.kerberos.principal</name>
  <value>hive/_HOST@EXAMPLE.COM</value>
</property>

<property>
  <name>hive.metastore.pre.event.listeners</name>
  <value>org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener</value>
</property>

<property>
  <name>hive.metastore.sasl.enabled</name>
  <value>true</value>
</property>

<property>
  <name>hive.metastore.server.max.threads</name>
  <value>100000</value>
</property>

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://masternode1.com:9083</value>
</property>

<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>/user/platform</value>
</property>

Вопросы:


  1. Вся команда разработчиков теперь не уверена, почему и откуда берется этот путь: / apps / hive / warehouse, даже после переопределения нашего пользовательского hive-site.xml?

  2. Это то, что внутренняя структура HDFS вызывает это местоположение для хранения промежуточных результатов и требует разрешения на выполнение этого пути?

В соответствии с политикой мы не можем предоставить пользователям доступ на уровне 777 в / apps / hive / warehouse по двум причинам:

Существует вероятность того, что в будущем появятся другие пользователи. Предоставлять 777 пользователям на складе небезопасно.

  1. Верны ли две приведенные выше причины или есть какое-то решение?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Метасторское хранилище Hive имеет собственный XML-файл, который определяет, где расположены таблицы Hive в HDFS. Это свойство определяется HiveServer, а не Spark

Например, в кластере Hortonworks обратите внимание, что хранилище имеет 777 разрешений и принадлежит hive пользователю и hdfs группе суперпользователя.

$ hdfs dfs -ls /apps/hive
Found 2 items
drwxrwxrwx   - hive hadoop          0 2018-02-27 20:20 /apps/hive/auxlib
drwxrwxrwx   - hive hdfs            0 2018-06-27 10:27 /apps/hive/warehouse

Согласно вашей ошибке, этот каталог существует, но ни один пользователь не может читать, записывать или перечислять содержимое этого каталога хранилища.

В идеале, я бы предложил не помещать хранилище в каталог пользователей HDFS.

0 голосов
/ 27 июня 2018

Похоже, проблема разрешения на HDFS с пользователем "diplatform".

Войдите в систему с правами администратора и выполните следующие действия

hadoop fs -mkdir -p /apps/hive/warehouse
hadoop fs -mkdir /tmp
hadoop fs -chmod -R 777 /user/hive
hadoop fs -chmod 777 /tmp

Затем после создания оператора базы данных из "diplatform".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...