Сборка Spark в хранилище метаданных улья MySQL не используется

Я использую Apache Spark 2.1.1 и поместил следующий файл hive-site.xml в папку $SPARK_HOME/conf:

<?xml version="1.0"?>
<configuration>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://mysql_server:3306/hive_metastore?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>password</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hive.metastore.schema.verification</name>
  <value>false</value>
  <description>password to use against metastore database</description>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>${test.tmp.dir}/hadoop-tmp</value>
  <description>A base for other temporary directories.</description>
</property>
<property>
  <name>hive.metastore.warehouse.dir</name>
  <value>hdfs://hadoop_namenode:9000/value_iq/hive_warehouse/</value>
  <description>Warehouse Location</description>
</property>
</configuration>

Когда я запускаю комиссионный сервер, схема хранилища метаданных создается в моей базе данных MySQL, но не используется, вместо этого используется Derby.

Не удалось найти никакой ошибки в файле журнала сберегательного сервера, единственное, что привлекает мое внимание, это то, что он сначала пытается использовать MySQL (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is MYSQL), но затем без каких-либо ошибок вместо этого использует Derby (INFO MetaStoreDirectSql: Using direct SQL, underlying DB is DERBY). Это журнал сберегательного сервера https://www.dropbox.com/s/rxfwgjm9bdccaju/spark-root-org.apache.spark.sql.hive.thriftserver.HiveThriftServer2-1-s-master.value-iq.com.out?dl=0

В моей системе не установлен куст, я просто делаю вид, что использую встроенный Hive Apache Spark.

Я использую mysql-connector-java-5.1.23-bin.jar, который находится в папке $SPARK_HOME/jars.


person José    schedule 19.07.2017    source источник
comment
установите значение hive.metastore.schema.verification в false в hive-site.xml как в hive, так и в spark conf, перезапустите службы и повторите попытку.   -  person Noman Khan    schedule 29.07.2017
comment
Я установил его и такое же поведение. Когда вы говорите как в улье, так и в искре, вы имеете в виду $SPARK_HOME/conf/hive-site.xml и $SPARK_HOME/conf/spark-defaults.conf? Помните, что у меня не установлен Hive, я использую Spark, встроенный в Hive.   -  person José    schedule 29.07.2017


Ответы (1)


Как показано в файле hive-site.xml, вы не установили службу хранилища метаданных для подключения. Таким образом, spark будет использовать службу по умолчанию, которая представляет собой локальную службу хранилища метаданных с бэкэндом derby DB.

  1. Запустите службу хранилища метаданных. вы можете посмотреть здесь, как запустить службу администратор хранилища метаданных hive руководство. Вы запускаете службу хранилища метаданных с серверной частью базы данных MySQL, используя тот же файл hive-site.xml, и добавляете следующие строки для запуска службы хранилища метаданных на METASTORESERVER через порт XXXX:

    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://METASTRESERVER:XXXX</value>
    </property>
    
  2. Пусть spark знает, где запущена служба хранилища метаданных. Это можно сделать с помощью того же файла hive-site.xml, который вы использовали при запуске службы хранилища метаданных (с добавленными к нему строками выше). Скопируйте этот файл в путь конфигурации Spark, затем перезапустите сервер экономии искры.

person user1314742    schedule 31.07.2017
comment
Но у меня не установлен hive, у меня просто Apache Spark. Итак, если я запущу комиссионный сервер, расположенный в папке $SPARK_HOME/sbin, он будет использовать единственный файл hive-site.xml, доступный в $SPARK_HOME/conf. Или есть что-то, чего я до сих пор не понимаю? - person José; 31.07.2017
comment
К сожалению, я не знаю другого способа запуска службы метахранилищ без использования улья. ваше понимание хорошо, но идея состоит в том, что сервер экономии искры построен на сервере улья, используя службу хранилища метаданных, которая играет роль посредника между сервером улья/искры и серверной базой данных. - person user1314742; 31.07.2017
comment
чтобы запустить хранилище метаданных с использованием улья, вам нужно просто загрузить версию улья, разархивировать ее, а затем поместить файл hive-site.xml в конфигурацию улья, а затем запустить его сервер хранилища метаданных. дополнительная настройка не требуется. - person user1314742; 31.07.2017
comment
Спасибо за ваш ответ, я вознаградил его. Один момент, если я использую hive, то нужно ли мне устанавливать его на каждую ноду моего кластера, или достаточно будет иметь его на одной машине? - person José; 31.07.2017
comment
Если вы хотите использовать куст только для запуска хранилища метаданных, установите его на одном узле в кластере. НЕТ необходимости устанавливать его на все узлы. ‹br/› спасибо за щедрость, пожалуйста, когда вы чувствуете, что этот ответ является решением проблемы, примите его, чтобы он был помечен как ответ;) - person user1314742; 31.07.2017
comment
Проблема в том, что я хочу использовать комиссионный сервер, предоставленный spark, чтобы запрашивать его через JDBC, но если я запущу hive thrift server, то запросы будут выполняться через hive без использования spark engine. Что я могу сделать? - person José; 31.07.2017
comment
Давайте продолжим обсуждение в чате. - person user1314742; 31.07.2017
comment
Я нашел способ решить проблему, как вы правильно предлагаете, я установил Hive для использования службы хранилища метаданных, проблема заключалась в том, что я установил Hive 2.1 и читал некоторую документацию о искре, и искра собрана с Hive 1.2, поэтому Я установил этот, и тогда он работает. Каким-то образом, когда я запускаю комиссионный сервер, он все еще регистрирует Using direct SQL, underlying DB is DERBY, но также подключается к URI метахранилища куста. Я добавил в вопрос, что я не использовал Hive, поэтому, пожалуйста, добавьте к вашему ответу, что я должен установить Hive версии 1.2, и я приму это. Большое спасибо. - person José; 01.08.2017
comment
Хороший улов!!, забыл сказать. если вы хотите больше узнать о зависимостях и их версиях, посмотрите github.com/apache/spark/blob/v2.1.0/pom.xml#L133 - person user1314742; 01.08.2017
comment
Я действительно обнаружил, что служба метахранилища не нужна. Первоначально следуя этим указаниям и заставив его работать с ним, я затем просто удалил hive.metastore.uris, закрыл службу хранилища метаданных улья и подключил искру напрямую к MySQL, и это, казалось, работало точно так же, но вообще без требований улья. Есть ли какой-либо недостаток в том, чтобы сделать это таким образом? Кажется, это то, что пытался сделать ОП, но я не уверен, почему тогда это не сработало. - person user1084563; 07.08.2018