Вопрос или проблема
Я пытаюсь установить Apache Hive (3.1.1) на многовузловый кластер Hadoop (3.2.0) с 1 мастером имени и 3 узлами данных.
Я следовал пошаговому руководству по началу работы на сайте Apache, но при выполнении команды “hive” я получаю чрезвычайно длинный стек вызовов в файле hive.log наряду с некоторыми другими проблемами в самой консоли.
Ошибка в консоли связана с несколькими привязками SLF4J:
> SLF4J: Класс путь содержит несколько привязок SLF4J. SLF4J: Найдено
> привязка в
> [jar:file:/home/hadoop/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Найдено привязка в
> [jar:file:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Смотрите http://www.slf4j.org/codes.html#multiple_bindings для объяснения. SLF4J: Фактическая привязка типа
> [org.apache.logging.slf4j.Log4jLoggerFactory] ID сеанса Hive =
> ebd3ca4d-0910-47d7-96a1-e7d1d369f919
>
> Логирование инициализировано с использованием конфигурации в
> jar:file:/home/hadoop/hive/lib/hive-common-3.1.1.jar!/hive-log4j2.properties
> Асинхронно: true
Ошибка Hive.log, похоже, связана с настройкой базы данных метастора. Однако я новичок в этой области и не совсем знаком со всеми используемыми терминами, поэтому мне очень трудно следить за этим стеком вызовов, и я не могу найти способ это исправить. Ниже приведен стек вызовов, но в сокращенном формате, чтобы уместиться в теле этого вопроса.
2019-07-05T10:24:28,966 INFO [main] conf.HiveConf: Найден файл конфигурации file:/home/hadoop/hive/conf/hive-site.xml
2019-07-05T10:24:29,990 INFO [main] SessionState: ID сеанса Hive = ebd3ca4d-0910-47d7-96a1-e7d1d369f919
2019-07-05T10:24:30,133 INFO [main] SessionState:
Логирование инициализировано с использованием конфигурации в jar:file:/home/hadoop/hive/lib/hive-common-3.1.1.jar!/hive-log4j2.properties Асинхронно: true
2019-07-05T10:24:31,583 INFO [main] session.SessionState: Создана директория HDFS: /tmp/hive/hadoop/ebd3ca4d-0910-47d7-96a1-e7d1d369f919
2019-07-05T10:24:31,618 INFO [main] session.SessionState: Создана локальная директория: /tmp/hadoop/ebd3ca4d-0910-47d7-96a1-e7d1d369f919
2019-07-05T10:24:31,628 INFO [main] session.SessionState: Создана директория HDFS: /tmp/hive/hadoop/ebd3ca4d-0910-47d7-96a1-e7d1d369f919/_tmp_space.db
2019-07-05T10:24:31,644 INFO [main] conf.HiveConf: Используется значение по умолчанию, переданное для ID лога: ebd3ca4d-0910-47d7-96a1-e7d1d369f919
2019-07-05T10:24:31,644 INFO [main] session.SessionState: Обновление имени потока на ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main
2019-07-05T10:24:32,691 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.HiveMetaStore: 0: Открытие исходного магазина с классом реализации:org.apache.hadoop.hive.metastore.ObjectStore
2019-07-05T10:24:32,717 WARN [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.ObjectStore: datanucleus.autoStartMechanismMode установлен на неподдерживаемое значение null. Установка на значение: проигнорировано
2019-07-05T10:24:32,723 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.ObjectStore: ObjectStore, инициализация вызвана
2019-07-05T10:24:32,724 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] conf.MetastoreConf: Найден файл конфигурации file:/home/hadoop/hive/conf/hive-site.xml
2019-07-05T10:24:32,725 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] conf.MetastoreConf: Невозможно найти файл конфигурации hivemetastore-site.xml
2019-07-05T10:24:32,725 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] conf.MetastoreConf: Найден файл конфигурации null
2019-07-05T10:24:32,726 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] conf.MetastoreConf: Невозможно найти файл конфигурации metastore-site.xml
2019-07-05T10:24:32,726 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] conf.MetastoreConf: Найден файл конфигурации null
2019-07-05T10:24:33,634 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] hikari.HikariDataSource: HikariPool-1 - Запуск...
2019-07-05T10:24:33,641 WARN [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] util.DriverDataSource: Зарегистрированный драйвер с driverClassName=org.apache.derby.jdbc.EmbeddedDriver не найден, попытка прямой инстанциации.
2019-07-05T10:24:33,926 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] pool.PoolBase: HikariPool-1 - Драйвер не поддерживает получение/установку сетевого таймаута для соединений. (Функция не реализована: нет деталей.)
2019-07-05T10:24:33,938 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] hikari.HikariDataSource: HikariPool-1 - Запуск завершен.
2019-07-05T10:24:34,001 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] hikari.HikariDataSource: HikariPool-2 - Запуск...
2019-07-05T10:24:34,001 WARN [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] util.DriverDataSource: Зарегистрированный драйвер с driverClassName=org.apache.derby.jdbc.EmbeddedDriver не найден, попытка прямой инстанциации.
2019-07-05T10:24:34,007 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] pool.PoolBase: HikariPool-2 - Драйвер не поддерживает получение/установку сетевого таймаута для соединений. (Функция не реализована: нет деталей.)
2019-07-05T10:24:34,008 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] hikari.HikariDataSource: HikariPool-2 - Запуск завершен.
2019-07-05T10:24:34,697 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.ObjectStore: Установка классов объектов MetaStore с hive.metastore.cache.pinobjtypes="Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order"
2019-07-05T10:24:34,811 WARN [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.MetaStoreDirectSql: Запрос самопроверки [select "DB_ID" from "DBS"] не удался; прямой SQL отключен
javax.jdo.JDODataStoreException: Ошибка при выполнении SQL-запроса "select "DB_ID" from "DBS"".
...
Причина: java.sql.SQLSyntaxErrorException: Таблица/Представление 'DBS' не существует.
...
Причина: org.apache.derby.iapi.error.StandardException: Таблица/Представление 'DBS' не существует.
...
2019-07-05T10:24:34,817 INFO [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.ObjectStore: Инициализирован ObjectStore
2019-07-05T10:24:37,667 ERROR [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.RetryingHMSHandler: MetaException(сообщение: Информация о версии не найдена в метасторе.)
...
2019-07-05T10:24:37,667 ERROR [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metastore.RetryingHMSHandler: HMSHandler Фатальная ошибка: MetaException(сообщение: Информация о версии не найдена в метасторе.)
...
2019-07-05T10:24:37,667 WARN [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metadata.Hive: Не удалось зарегистрировать все функции.
java.lang.RuntimeException: Невозможно создать экземпляр org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
...
Причина: java.lang.reflect.InvocationTargetException
...
Причина: org.apache.hadoop.hive.metastore.api.MetaException: Информация о версии не найдена в метасторе.
...
2019-07-05T10:24:37,711 ERROR [ebd3ca4d-0910-47d7-96a1-e7d1d369f919 main] metadata.HiveMaterializedViewsRegistry: Проблема с подключением к метастору при инициализации реестра представлений
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Невозможно создать экземпляр org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
...
Причина: java.lang.RuntimeException: Невозможно создать экземпляр org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
...
Причина: java.lang.reflect.InvocationTargetException
...
Причина: org.apache.hadoop.hive.metastore.api.MetaException: Информация о версии не найдена в метасторе.
Я никогда не использовал базы данных Derby, Java Database Connectivity (JDBC) или MySQL на этом устройстве раньше – может быть, проблема такая же простая, как проблема зависимостей? Хотя в руководстве по Hive ничего не указано.
Заранее спасибо.
Я сталкивался с той же проблемой раньше, и вот мое решение.
В моем $HIVE_HOME/scripts/metastore/upgrade/derby/hive-schema-3.1.0.derby.sql
использовавшаяся база данных была ‘APP’ (потому что ‘CREATE TABLE "APP"."DBS"
‘).
Но в моем $HIVE_HOME/conf/hive-site.xml
это было так:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
<description>
JDBC строка подключения для JDBC метастора.
Чтобы использовать SSL для шифрования/аутентификации соединения, предоставьте аргумент SSL, специфичный для базы данных, в строке подключения.
Например, jdbc:postgresql://myhost/db?ssl=true для базы данных postgres.
</description>
</property>
Итак, я заменил “metastore_db” на “APP” и повторно инициализировал метастор Derby.
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=APP;create=true</value>
<description>
JDBC строка подключения для JDBC метастора.
Чтобы использовать SSL для шифрования/аутентификации соединения, предоставьте аргумент SSL, специфичный для базы данных, в строке подключения.
Например, jdbc:postgresql://myhost/db?ssl=true для базы данных postgres.
</description>
</property>
Ответ или решение
Установка Hive: Ошибка при выполнении SQL-запроса "select "DB_ID" from "DBS""
Установка Apache Hive может быть непростой задачей, особенно в контексте многонодового кластера Hadoop. Рассмотрим проблему, с которой вы столкнулись, и найдем подходящее решение на основе предоставленной информации.
Понимание проблемы
Вы установили Apache Hive версии 3.1.1 на кластер Hadoop 3.2.0, но при попытке запустить команду hive
возникают ошибки. В логах Hive видим, что основная проблема заключается в попытке выполнения SQL-запроса к метастору, а именно:
Caused by: org.apache.derby.iapi.error.StandardException: Table/View 'DBS' does not exist.
Это сообщение указывает на то, что Hive не может найти таблицу DBS
в базе данных метастора. На данный момент необходимо убедиться, что метастор корректно инициализирован.
Шаги для решения
-
Инициализация метастора: Убедитесь, что вы правильно создали схему для метастора Hive. Если вы используете встроенную базу данных Derby, выполните следующие шаги:
- Откройте файл
hive-schema-3.1.0.derby.sql
, который находится в директории$HIVE_HOME/scripts/metastore/upgrade/derby/
. - Убедитесь, что в этом файле создаются необходимые таблицы, включая
DBS
.
- Откройте файл
-
Проверка конфигурации Hive:
- Проверьте файл конфигурации
hive-site.xml
в каталоге$HIVE_HOME/conf/
. Убедитесь, что параметрjavax.jdo.option.ConnectionURL
правильно настроен. Например:<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> <description> JDBC connect string for a JDBC metastore. </description> </property>
- Если вы изменяли название базы данных, убедитесь, что оно совпадает с тем, что указано в SQL-скрипте.
- Проверьте файл конфигурации
-
Решение проблемы с множественными привязками SLF4J:
Сообщения о множественных привязках SLF4J можно игнорировать, если они не мешают работе системы. Однако, если они вызывают проблемы, рекомендуется оставить только одну версию библиотеки SLF4J в вашем classpath. Это может потребовать удаления других версий JAR-файлов из каталогаlib/
Hive. -
Проверка наличия необходимых библиотек и зависимостей:
Убедитесь, что у вас все необходимые зависимости установлены. В вашем случае это может быть драйвер JDBC для Derby:- Если вы используете Derby в качестве метастора, убедитесь, что он включен в класс-путь Hive.
-
Перезапуск с активацией метастора:
- После внесения изменений, повторите инициализацию метастора командой, которая запускает скрипт для установки схемы, если вы это еще не делали.
- Запустите Hive заново, чтобы убедиться, что конфигурация работает и ошибки исчезли.
Заключение
Надеюсь, что эти шаги помогут вам решить проблему с запуском Hive и инициализацией метастора. Важно правильно настроить все компоненты и убедиться, что каждая конфигурация соответствует требованиям. Если у вас возникнут дополнительные вопросы, не стесняйтесь их задавать.