Как установить и настроить HIVE Metastore с MYSQL

⚡ Умное резюме

В хранилище метаданных Hive хранятся все определения таблиц, имена столбцов и типы данных в Apache Hive, и перенос этого репозитория из базы данных Derby по умолчанию в MySQL Именно это позволяет нескольким пользователям подключаться одновременно.

  • 🇧🇷 Что в нём содержится: Метахранилище хранит метаданные схемы в реляционных таблицах, в то время как сами данные таблиц остаются в HDFS.
  • ???? Почему Дерби терпит неудачу: Входящий в комплект метаданные Derby принимает одну активную сессию, что исключает его использование в общем или производственном кластере.
  • 🔧 Четыре объекта недвижимости: СвязьURLПараметры ConnectionDriverName, ConnectionUserName и ConnectionPassword в файле hive-site.xml указывают на Hive по следующему пути: MySQL.
  • 🔗 Размещение водителя: MySQL Для успешного подключения необходимо, чтобы JDBC-коннектор был подключен к каталогу lib Hive.
  • 🧱 Схема сначала: Утилита schematool создает таблицы метаданных, и Hive отказывается запускаться с неинициализированной схемой.
  • 🔎 Подтвердить в MySQL: Таблица, созданная в Hive, немедленно отображается в виде строки в таблице TBLS базы данных metastore.

Как установить и настроить хранилище метаданных Hive MySQL

Что такое HIVE Metastore?

Hive Metastore — это репозиторий, в котором хранятся метаданные (названия столбцов, типы данных, комментарии и т. д.), относящиеся к... Апачский улей через MySQL or PostgreSQL. Это хранилище метаданных Hive реализовано с использованием таблиц в реляционной базе данных.

В метаданных нет информации о самих строках. Записи остаются в HDFS, а метаданные содержат только информацию о местонахождении каждой таблицы и названиях её столбцов, поэтому их потеря приводит к повреждению схемы, а не данных.

Зачем использовать MySQL в Hive как Metastore

Бэкенд метаданных — это выбор, а не фиксированная часть Hive, и поставляемый по умолчанию вариант намеренно минималистичен. Три ограничения заставляют почти все установки отказаться от него.

  • По умолчанию Hive использует базу данных Derby в качестве хранилища метаданных.
  • В Дерби одновременно может работать только один активный пользователь.
  • Использование Дерби в производственных условиях не рекомендуется.

Итак, решение здесь следующее:

  • Используйте MySQL в качестве метаданных на бэкэнде для одновременного подключения нескольких пользователей к Hive
  • MySQL это лучший выбор для автономного метахранилища.

Как установить и настроить Hive Metastore для MySQL База данных

Описанные ниже девять шагов выполняются по порядку на компьютере, на котором уже установлены Hadoop и Hive. Каждый шаг завершается скриншотом фактического вывода терминала или командной строки.

Шаг 1) Установите MySQL серверу
На этом этапе мы собираемся выполнить две задачи

  1. Установка mysql-сервера
  2. Проверка mysql-сервера и его процесса

Посмотрите на график sudo apt-get install mysql-server команду, мы можем загрузить MySQL сервер. Установить MySQL как показано на скриншоте ниже.

В терминале запущена команда `sudo apt-get install mysql-server`. Ubuntu

После успешной установки MySQL Процесс будет запущен, как показано на скриншоте ниже, где проверка процесса подтверждает работоспособность службы.

Терминал подтверждает запуск процесса mysql-server после установки.

Шаг 2) Установите MySQL Java соединитель
Установка MySQL Java разъем. Это для Java зависимости и цели подключения, поскольку Hive достигает MySQL через JDBC. На следующем скриншоте показана установка пакета.

Установка libmysql-java через терминал MySQL Java комплект разъемов

Шаг 3) Создайте мягкую ссылку для соединителя
Создание символической ссылки для коннектора в каталоге библиотек Hive. Это символическая ссылка между Java и MySQLИменно это добавляет JAR-файл драйвера в путь поиска классов Hive. Команда и её результат приведены ниже.

Терминал создает символическую ссылку для MySQL JAR-файл коннектора находится в каталоге lib Hive.

Шаг 4) Настройка MySQL хранилище в Улье
MySQL Для создания любого пользователя Hive необходимо открыть оболочку под учетной записью root, как показано далее.

Открытие терминала MySQL используйте команду mysql -u root -p в командной оболочке

  • Введите команду `mysql –u root –p`, а затем пароль.
  • Здесь –u обозначает имя пользователя root, а –p – пароль.
  • После ввода указанной выше команды пользователю необходимо ввести действительный пароль и нажать клавишу Enter.
  • Тогда оно войдет в MySQL режим оболочки

Шаг 5) Создайте имя пользователя и пароль.
Создание имени пользователя и пароля для MySQLи предоставление привилегий. На скриншоте ниже показаны три оператора, выполняющиеся внутри. MySQL ракушка.

MySQL Создание учетной записи hiveuser и предоставление ей привилегий.

Нам нужно выполнить команды, как показано ниже:

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword'; 
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

On MySQL 8. Объединенная форма второго оператора больше не обрабатывается, поскольку IDENTIFIED BY был удален из GRANT. Сначала создайте учетную запись, а затем предоставьте ей права доступа, и повторите строку CREATE USER как для хоста localhost, так и для хоста с подстановочным знаком.

Шаг 6) Настройка файла hive-site.xml

  • После выполнения шага 5 назначаются имя пользователя и пароль. MySQL база данных и предоставление привилегий.
  • Здесь мы настроим некоторые параметры в Hive для установления соединения с... MySQL .

Конфигурационный файл открывается из каталога Hive conf, как показано на следующем скриншоте.

В терминале открывается файл hive-site.xml для редактирования в каталоге Hive conf.

На следующем скриншоте показан готовый файл со всеми четырьмя свойствами.

В файле hive-site.xml показаны четыре свойства подключения javax.jdo.option.

На приведенном выше скриншоте мы видим следующее. Здесь мы определяем 4 свойства, необходимые для установления MySQL в качестве метахранилища в Hive.

Это следующие:

  1. Это свойство предназначено для подключения. URLЗдесь мы определяем соединение.URL В этом свойстве оно выступает в качестве строки подключения JDBC и также представляет собой местоположение хранилища метаданных.
  2. Это свойство используется для указания имени драйвера подключения. В данном случае com.mysql.jdbc.Driver — это значение, которое необходимо указать в теге value.
  3. Это свойство используется для определения имени пользователя для подключения. В данном случае мы определили «hiveuser» в качестве имени пользователя.
  4. Это свойство используется для указания пароля подключения. В данном случае мы определили «hivepassword» в качестве пароля пользователя.

После того, как свойства будут добавлены в файл hive-site.xml, необходимо вручную сохранить (Ctrl+S) и закрыть файл. После закрытия файла необходимо создать таблицу Hive и проверить сведения о ней. MySQL место хранения.

Поместите этот код в hive-site.xml.

улей-site.xml

<configuration>
	<property>
		<name>javax.jdo.option.ConnectionURL</name>
		<value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value>
		<description>metadata is stored in a MySQL server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionDriverName</name>
		<value>com.mysql.jdbc.Driver</value>
		<description>MySQL JDBC driver class</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionUserName</name>
		<value>hiveuser</value>
		<description>user name for connecting to mysql server</description>
	</property>
	<property>
		<name>javax.jdo.option.ConnectionPassword</name>
		<value>hivepassword</value>
		<description>password for connecting to mysql server</description>
	</property>
</configuration>

Два из указанных выше значений зависят от используемой версии разъема. MySQL В Connector/J 8 класс драйвера был переименован в com.mysql.cj.jdbc.Driver, и теперь он ожидает явного указания порта и настроек SSL, поэтому современный URL Обычно читается jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&useSSL=false. Поскольку пароль хранится в открытом виде, файл должен быть доступен для чтения только учетной записи службы Hive.

Шаг 7) Создайте таблицу
Создайте таблицу «guru99» в Hive, как показано в приведенном ниже примере оболочки Hive.

Создание таблицы guru99 в оболочке Hive с целочисленным и строковым столбцами.

На скриншоте выше мы можем наблюдать следующее

  • Создание таблицы с именем «guru99» с двумя названиями столбцов.
  • В названиях столбцов указаны их типы данных: один — целое число, другой — строка.

На следующем шаге мы проверим, хранится ли он в MySQL или нет.

Шаг 8) Войдите в MySQL режим оболочки
Сначала выбирается база данных metastore, а ниже представлен список таблиц.

MySQL Команда `shell running use metastore` запускает `show tables` для вывода списка таблиц метахранилища.

На скриншоте выше мы можем наблюдать следующее

  • Сначала нам нужно выбрать базу данных с помощью параметра «use metastore».
  • После выбора хранилища метаданных мы можем проверить содержащиеся в нем таблицы, используя команду «show tables», как показано на скриншоте.
  • Независимо от того, какие таблицы создаются в Hive, метаданные, соответствующие этим таблицам, хранятся в TBLS. MySQL база данных
  • Таблица «guru99» создается в Hive, поэтому соответствующие метаданные хранятся в ней. MySQL в рамках TBLS

Шаг 9) Введите select * from TBLS.
Проверка наличия созданной таблицы в MySQL или нет. Запрос и его результат представлены на скриншоте ниже.

MySQL В командной оболочке выполняется запрос `select * from TBLS` и отображается строка таблицы guru99.

При вводе select * from TBLS будут отображаться таблицы, которые мы создали в режиме оболочки Hive.

На скриншоте выше мы можем наблюдать следующие вещи:

  • Название таблицы «guru99», созданной в Hive, можно отобразить в MySQL режим оболочки
  • Помимо этого, он также предоставит информацию о времени создания таблицы, времени доступа и других свойствах, как показано на скриншоте выше.

Как инициализировать схему Hive Metastore с помощью schematool

Флаг createDatabaseIfNotExist в соединении URL Создаёт пустую базу данных метаданных, но не создаёт примерно семьдесят таблиц, которые Hive ожидает в ней. В Hive 1.x и более поздних версиях эта задача выполняется утилитой schematool, и она пропускается.ping Это самая распространенная причина, по которой только что настроенное хранилище метаданных отказывается запускаться.

$HIVE_HOME/bin/schematool -dbType mysql -initSchema

Команда считывает те же четыре свойства из файла hive-site.xml, устанавливает соединение с учетной записью hiveuser и запускает встроенный SQL-скрипт, соответствующий версии Hive. Успешное выполнение завершается сообщением о завершении, после чего состояние можно подтвердить в любое время.

$HIVE_HOME/bin/schematool -dbType mysql -info

Приведённые ниже флаги охватывают весь жизненный цикл схемы метаданных.

Опция Что она делает
-dbType Указывает название бэкэнда, например, mysql, derby, postgres, oracle или mssql.
-initSchema Создает таблицы метаданных для текущей версии Hive.
-Информация Сообщает версию схемы, зарегистрированную в базе данных.
-upgradeScheme Выполняет миграцию существующей схемы после обновления Hive.
-Validate Проверяет схему на наличие отсутствующих таблиц и несоответствий версий.

Перед началом работы стоит знать об одном связанном свойстве. Если hive.metastore.schema.verification имеет значение true, Hive сравнивает версию схемы в MySQL Это противоречит собственным правилам и отказывается запускаться при несоответствии. Эта проверка является мерой предосторожности, поэтому правильным решением будет запустить обновление, а не отключать его. То же самое MySQL бэкенд используется при установке Hive, описанной в установить Hive на Ubuntu.

Распространенные ошибки Hive Metastore и способы их исправления

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

Симптом Причина и устранение
Информация о версии не найдена в метахранилище. Схема так и не была создана. Запустите schematool с параметром -initSchema для той же базы данных, которая указана в подключении. URL
Исключение ClassNotFoundException для драйвера JDBC В каталоге библиотек Hive отсутствует JAR-файл коннектора, или используется Connector/J 8, и класс теперь называется com.mysql.cj.jdbc.Driver. Перепроверьте символическую ссылку из шага 3.
Доступ запрещен для пользователя hiveuser Привилегии были предоставлены только одному хосту. Создайте учетные записи для localhost и хоста с подстановочным знаком, затем выполните команду flush privileges.
Синтаксическая ошибка около IDENTIFIED BY MySQL Удалите 8 символов из оператора GRANT. Сначала выполните команду CREATE USER, а затем GRANT.
Получение открытого ключа запрещено. Connector/J8 по умолчанию отклоняет незашифрованное рукопожатие. Добавьте useSSL=false и allowPublicKeyRetrieval=true в JDBC. URL в доверенной сети
После обновления Hive отсутствуют таблицы. Схема по-прежнему соответствует старой версии. Запустите schematool с параметром -upgradeSchema вместо отключения проверки схемы.

После того как метаданные начнут надежно отвечать, в них будут созданы определения таблиц с использованием операторов, описанных в Создание, изменение и удаление таблиц в Hive..

Часто задаваемые вопросы (FAQ)

Компания Hive оказывает поддержку Дерби. MySQL, PostgreSQL, Oracle и Microsoft SQL Server, и schematool принимает каждый из них через флаг -dbType. Derby остается вариантом по умолчанию и по-прежнему ограничен одной сессией.

Встроенная версия запускает Derby внутри процесса Hive. Локальная версия запускает код метаданных внутри Hive, но с использованием внешней базы данных, например, MySQL. Remote запускает метаданные как собственную службу Thrift, которую используют несколько клиентов.

В записях DBS содержатся названия баз данных, в записях TBLS — названия таблиц, в записях COLUMNS_V2 — названия определений столбцов, в записях SDS — названия дескрипторов хранения, а в записях PARTITIONS — названия записей разделов. Эти имена являются внутренними, поэтому для проверки их следует запрашивать, а не редактировать вручную.

Сохраните его в хранилище ключей поставщика учетных данных Hadoop и укажите в hive.metastore.credential.provider.path путь к этому файлу, затем удалите необработанное значение. Ограничение прав доступа к файлу hive-site.xml — это минимальный запасной вариант.

Файлы в HDFS сохраняются, но все определения таблиц, разделов и столбцов исчезают, и Hive больше не может их читать. MySQL Таким образом, дампы базы данных метаданных являются частью обычного резервного копирования кластера.

Сервис Thrift metastore по умолчанию прослушивает порт 9083, заданный через hive.metastore.port. Клиенты обращаются к нему через hive.metastore.uris, а не напрямую с помощью учетных данных JDBC, что позволяет избежать необходимости ввода пароля к базе данных на клиентских машинах.

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

Copilot создает блок свойств javax.jdo.option на основе короткого комментария, а агентные помощники могут автоматизировать всю настройку. Проверьте класс драйвера и порт, поскольку обучающие данные по-прежнему отдают предпочтение старому имени коннектора.

Подведем итог этой публикации следующим образом: