VK Cloud

Как развернуть Hive Metastore для работы с CedrusData: пошаговая инструкция

1 сентября 2026 г.
шпрингер.png
Елена Шпрингер
Автор статьи
_blog_head_72.png

Hive Metastore обычно вспоминают в тот момент, когда нужно подключить к озеру данных ещё один движок — CedrusData Engine, Trino, Spark или Hive. Файлы уже могут лежать в S3, HDFS или на локальном диске, но самому движку этого недостаточно. Ему нужно знать, где именно хранится конкретная таблица, какие у неё колонки, как устроены партиции и по каким путям искать данные. Эту информацию обычно хранит метастор.

Для небольшого стенда не нужен Hadoop-кластер с HDFS и YARN. Hive Standalone Metastore запускается отдельным сервисом, хранит свои данные в обычной реляционной БД и отдаёт метаданные движкам по Thrift API. В этой инструкции соберём такую связку на Hive Metastore 4.2 и PostgreSQL, а затем подключим к ней CedrusData Engine или Trino. Данные будут лежать локально, поэтому стенд подойдёт для экспериментов, проверки конфигурации и первого знакомства с Hive-коннектором.

Сначала разберём, когда Hive Metastore действительно нужен и чем он отличается от Iceberg REST Catalog. Затем поднимем PostgreSQL, настроим HMS и проверим, что движок может создать таблицу, записать Parquet-файл и прочитать его обратно. В конце покажем Docker-вариант и коротко разберём, что понадобится изменить для production-контура.

Савченко.jpg

Статья подготовлена совместно с экспертом

Павел Савченко, архитектор предпродажных решений

Что такое Hive Metastore и когда он нужен

Hive Metastore хранит метаданные озера данных: пути к файлам таблиц, имена схем, типы колонок, партиционирование, параметры таблиц и прочую информацию. Перед чтением таблицы SQL-движок запрашивает эти данные по Thrift-протоколу.

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

HMS без Hadoop: standalone-режим

Hive Standalone Metastore работает без Hadoop-кластера и HiveServer2. Это отдельный сервис, который можно поднять самостоятельно.

Библиотеки Hadoop нужны только для операций с файлами: например, создать директорию при CREATE SCHEMA или удалить её при DROP TABLE. Для этого не требуется разворачивать YARN или HDFS-кластер. Достаточно иметь Hadoop FileSystem API на машине, где запущен метастор.

Когда нужен HMS, а когда Iceberg REST Catalog

Выбор зависит от текущей инфраструктуры и направления развития платформы.

Сценарий Что использовать
Эксперименты, локальный стенд, legacy Hive-таблицы Hive Metastore
Новый production Lakehouse на Iceberg CedrusData Catalog, Apache Polaris, Lakekeeper
Миграция с Hadoop/Hive на Iceberg Hive Metastore как промежуточный этап

С версии 4.1 у Hive Metastore появился собственный Iceberg REST Catalog API, который работает параллельно с Thrift-интерфейсом. Формально это сокращает разрыв между классическим Hive-подходом и REST-каталогом. Для нового production-проекта на Iceberg обычно проще сразу выбрать отдельный REST-каталог.

Архитектура стенда

Метастор состоит из трёх частей:

  • Thrift-сервер принимает запросы от CedrusData Engine, Trino и Hive на порту 9083.
  • Реляционная СУБД хранит метаданные: имена таблиц, схемы, статистику и партиции.
  • Hadoop FileSystem API выполняет операции с файлами данных.

В этом стенде метаданные хранятся в PostgreSQL, а данные таблиц — в локальной файловой системе. В production локальную файловую систему обычно заменяют на S3-совместимое объектное хранилище, например VK Cloud Object Storage, или на HDFS. Сам сервис при этом не меняется.

Предварительные требования

Старые инструкции часто ориентируются на HMS 3.0 и несовместимый набор зависимостей. Для этого стенда нужны следующие версии.

Компонент Версия
JDK, Eclipse Temurin 21 для HMS 4.2.x, 17 для HMS 4.1.x
Docker 20.10 и новее
Apache Hadoop 3.4.3
Hive Standalone Metastore 4.2.0
PostgreSQL JDBC-драйвер 42.7.13
CedrusData Engine Актуальная версия

Совместимость CedrusData Engine с HMS 4.x стоит отдельно уточнить для конкретной версии движка. Upstream Trino с HMS 4.x работает, но настройки всегда лучше проверять на тестовом стенде.

Вариант 1: установка из архива

Инструкция рассчитана на Ubuntu или Debian. Все команды выполняются от обычного пользователя с правами sudo.

Шаг 1. Установить JDK

Hive Metastore 4.2.0 требует Java 21. Подключите репозиторий Adoptium и установите Eclipse Temurin: sudo apt update && sudo apt install -y wget apt-transport-https gnupg

wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo apt-key add - echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" \ | sudo tee /etc/apt/sources.list.d/adoptium.list sudo apt update && sudo apt install -y temurin-21-jdk

Для HMS 4.1 замените пакет на temurin-17-jdk.

Проверьте установку:

java -version

В выводе должна быть версия Java 21 для HMS 4.2 или Java 17 для HMS 4.1.

Шаг 2. Запустить PostgreSQL в Docker

PostgreSQL будет хранить метаданные HMS. Зафиксируйте мажорную версию образа, чтобы стенд можно было воспроизвести позже.

docker run --name postgres-hive \ -e POSTGRES_USER=hive \ -e POSTGRES_PASSWORD=hive \ -e POSTGRES_DB=metastore_db \ -p 5432:5432 \ -d postgres:18

Проверьте, что контейнер запущен:

docker ps

В списке должен быть postgres-hive со статусом Up.

Шаг 3. Создать warehouse-директорию

В эту директорию HMS будет записывать данные таблиц по умолчанию.

sudo mkdir /home/hive sudo chown "$USER" /home/hive

Проверьте владельца:

ls -ld /home/hive

Текущий пользователь должен быть владельцем каталога.

Шаг 4. Скачать Hadoop

Метастору нужны библиотеки Hadoop FileSystem API, даже если полноценный Hadoop-кластер не развёрнут.

wget https://downloads.apache.org/hadoop/common/hadoop-3.4.3/hadoop-3.4.3.tar.gz tar -xf hadoop-3.4.3.tar.gz

Проверьте дистрибутив:

hadoop-3.4.3/bin/hadoop version

Если файл недоступен в основном каталоге Apache, проверьте его в архиве Apache. Старые версии Hadoop со временем переносят туда.

Шаг 5. Скачать Hive Standalone Metastore

wget https://downloads.apache.org/hive/hive-standalone-metastore-4.2.0/hive-standalone-metastore-4.2.0-bin.tar.gz tar -xf hive-standalone-metastore-4.2.0-bin.tar.gz

В распакованной директории должны быть каталоги bin/, lib/ и conf/.

Для этого руководства используется HMS 4.2.0. Команды для 4.2.1 не отличаются, но для 4.2.0 доступен официальный Docker-образ, который понадобится во втором варианте установки.

Шаг 6. Установить JDBC-драйвер PostgreSQL

Hive Metastore подключается к PostgreSQL через JDBC. Драйвер нужно положить в каталог lib/.

export METASTORE_HOME="$(pwd)/apache-hive-metastore-4.2.0-bin" wget https://repo1.maven.org/maven2/org/postgresql/postgresql/42.7.13/postgresql-42.7.13.jar \ -P "$METASTORE_HOME/lib"

Проверьте, что файл скачался:

ls "$METASTORE_HOME/lib" | grep postgresql

Шаг 7. Настроить metastore-site.xml

Создайте файл $METASTORE_HOME/conf/metastore-site.xml:

<?xml version="1.0"?> <configuration> <property> <name>metastore.thrift.uris</name> <value>thrift://localhost:9083</value> </property> <property> <name>metastore.warehouse.dir</name> <value>/home/hive</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:postgresql://localhost:5432/metastore_db</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.postgresql.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <property> <name>metastore.expression.proxy</name> <value>org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy</value> </property> </configuration>

В HMS 4.x свойства hive.metastore.* переименовали в metastore.*. Старые названия работают как алиасы, но в новых конфигурациях лучше использовать актуальные ключи.

Блок javax.jdo.option.* не менялся со времён HMS 3.x. Здесь метастор получает параметры подключения к PostgreSQL и путь к warehouse-директории.

Шаг 8. Задать переменные окружения

export JAVA_HOME="$(dirname "$(dirname "$(readlink -f "$(which java)")")")" export HADOOP_HOME="$(pwd)/hadoop-3.4.3"

Проверьте значения:

echo "$JAVA_HOME" echo "$HADOOP_HOME"

Обе команды должны вывести существующие пути.

Шаг 9. Инициализировать схему PostgreSQL

cd "$METASTORE_HOME" bin/schematool -dbType postgres -initSchema

Параметр -dbType postgres обязателен. Если команда завершилась успешно, в выводе будет строка вида:

schemaTool completed

Шаг 10. Запустить Hive Metastore

bin/start-metastore

В другом терминале проверьте доступность Thrift-порта:

nc -zv localhost 9083

Ответ succeeded означает, что HMS слушает порт 9083 и готов принимать запросы от SQL-движков.

Вариант 2: быстрый старт через Docker

Docker-вариант полезен для локального стенда и CI/CD. Не нужно отдельно устанавливать Hadoop и JDK: зависимости уже входят в образ.

Официальный образ Apache Hive содержит выделенные теги для метастора, включая standalone-metastore-4.2.0 и standalone-metastore-4.1.0. Для production удобнее конфигурация из архива или собственный образ с зафиксированными зависимостями, но для проверки связки Docker достаточно.

Docker Compose

Создайте файл compose.yaml:

services: postgres: image: postgres:18 environment: POSTGRES_USER: hive POSTGRES_PASSWORD: hive POSTGRES_DB: metastore_db metastore: image: apache/hive:standalone-metastore-4.2.0 environment: SERVICE_NAME: metastore DB_DRIVER: postgres SERVICE_OPTS: >- -Djavax.jdo.option.ConnectionDriverName=org.postgresql.Driver -Djavax.jdo.option.ConnectionURL=jdbc:postgresql://postgres:5432/metastore_db -Djavax.jdo.option.ConnectionUserName=hive -Djavax.jdo.option.ConnectionPassword=hive ports: - "9083:9083" depends_on: - postgres volumes: - ./postgresql-42.7.13.jar:/opt/hive/lib/postgres.jar

Переменная SERVICE_NAME=metastore обязательна. Без неё контейнер не знает, какой сервис запускать. DB_DRIVER=postgres переключает бэкенд со встроенной Derby на PostgreSQL, а SERVICE_OPTS передаёт параметры JDBC-подключения.

JDBC-драйвер PostgreSQL в образ обычно не входит, поэтому его нужно скачать заранее и смонтировать в контейнер:

wget https://repo1.maven.org/maven2/org/postgresql/postgresql/42.7.13/postgresql-42.7.13.jar

Запустите стенд:

docker compose up -d

Проверьте Thrift-порт:

nc -zv localhost 9083

Если увидите Connection to localhost 9083 port succeeded, PostgreSQL запущен, схема применена, а HMS слушает запросы.

Ограничения Docker-варианта

Для файлов на хосте добавьте отдельный volume mount под warehouse-директорию. Иначе таблицы будут записываться внутрь контейнера и исчезнут после его пересоздания.

Настройки S3 или HDFS можно передать через SERVICE_OPTS, но длинный набор JVM-флагов хуже читается и поддерживается, чем отдельный metastore-site.xml.

Если Hive Metastore нужен только как точка входа для Trino и Iceberg, вместо связки PostgreSQL и Thrift можно рассмотреть CedrusData Catalog. Это Iceberg REST-каталог с RBAC, Web UI и работой с Object Storage без Hadoop-зависимостей.

Подключение CedrusData Engine

Проверим работу стенда на CedrusData Engine. Он использует тот же Hive-коннектор, что и upstream Trino.

Шаг 1. Установить CedrusData Engine

Разверните CedrusData Engine по инструкции для установки из архива.

Шаг 2. Настроить Hive-каталог

Создайте файл etc/catalog/hive.properties в директории CedrusData Engine:

connector.name=hive hive.metastore.uri=thrift://localhost:9083 hive.security=allow-all

connector.name=hive включает Hive-коннектор. Свойство hive.metastore.uri указывает на Thrift-сервис, запущенный в предыдущих шагах.

Параметр hive.security=allow-all отключает проверку прав доступа. Он годится только для локального стенда. В production для Hive-коннектора нужна отдельная модель авторизации.

Точный набор свойств лучше сверить с документацией установленной версии CedrusData Engine.

Шаг 3. Перезапустить движок

bin/launcher restart

Шаг 4. Создать схему и таблицу

Для проверки используем встроенный генератор TPC-DS. Реальные данные загружать не нужно. bin/trino --execute "CREATE SCHEMA hive.my_tpcds"

bin/trino --execute " CREATE TABLE hive.my_tpcds.call_center WITH (format = 'PARQUET') AS SELECT * FROM tpcds.sf1.call_center "

Шаг 5. Прочитать тестовые данные

bin/trino --execute " SELECT cc_call_center_id, cc_name FROM hive.my_tpcds.call_center "

Если запрос вернул список call-центров, метастор отдал схему таблицы, а движок прочитал Parquet-файлы из warehouse-директории.

Шаг 6. Проверить файлы

ls -R /home/hive

В каталоге my_tpcds/call_center/ должен появиться Parquet-файл. Метаданные таблицы лежат в PostgreSQL, а данные — в /home/hive.

Шаг 7. Удалить тестовые объекты

bin/trino --execute "DROP TABLE hive.my_tpcds.call_center" bin/trino --execute "DROP SCHEMA hive.my_tpcds" ls -R /home/hive

После удаления схемы warehouse-директория должна очиститься. HMS удалит данные через Hadoop FileSystem API одновременно с метаданными.

Типичные ошибки

Ошибка Причина Что проверить
MetaException: Unable to open a test connection PostgreSQL недоступен или указаны неверные credentials docker ps, порт 5432, ConnectionUserName, ConnectionPassword
Could not find or load main class ...HiveMetaStore Не задан HADOOP_HOME Экспортировать HADOOP_HOME с путём к Hadoop 3.4.3
java.lang.UnsupportedClassVersionError JDK старее требуемой HMS 4.2 требует JDK 21, HMS 4.1 — JDK 17
SchemaVersion mismatch Схема БД не соответствует версии HMS Выполнить bin/schematool -dbType postgres -upgradeSchema или пересоздать metastore_db
TTransportException при подключении движка HMS не запущен или закрыт порт 9083 nc -zv localhost 9083, логи bin/start-metastore

Следующие шаги

Локальный стенд — только отправная точка. Для production обычно нужно сделать ещё три вещи.

Перенести warehouse в Object Storage. Вместо локального пути укажите в metastore.warehouse.dir адрес вида s3a://bucket/path и настройте параметры fs.s3a.*. Endpoint и параметры для VK Cloud Object Storage берите из документации VK Cloud.

Подключить Apache Iceberg. Вместо Hive-коннектора можно использовать Iceberg-коннектор. Он добавляет ACID-транзакции, time travel и эволюцию схемы без пересоздания таблиц.

Заменить HMS на REST-каталог. CedrusData Catalog работает по Iceberg REST API, не требует Hadoop-зависимостей и включает RBAC. Для команд, которым Hive Metastore нужен только как совместимый слой для Trino и Iceberg, это способ убрать Thrift и внешний контур управления доступами.

blog_800x400_6041a73bf6_756c8305e7.jpg

REST-каталог для Iceberg с RBAC из коробки

CedrusData Catalog — Web UI и управление доступом поверх Iceberg REST API

FAQ

Что такое Hive Metastore и зачем он нужен

Hive Metastore — реестр метаданных озера данных: схем таблиц, типов колонок, путей к файлам и партиций. Trino, Spark и другие движки обращаются к нему по Thrift API, чтобы узнать структуру таблицы перед чтением файлов.

Нужен ли Hadoop для запуска Hive Metastore

Полный Hadoop-кластер не нужен. В standalone-режиме HMS использует Hadoop FileSystem API для операций с файлами, но не требует отдельного развёртывания HDFS или YARN.

Чем Hive Metastore отличается от Iceberg REST Catalog

Hive Metastore работает по Thrift, использует Hadoop-зависимости и обычно требует отдельного слоя RBAC. Iceberg REST Catalog использует HTTP API и поддерживает возможности Iceberg нативно.

Начиная с HMS 4.1, у Hive Metastore есть собственный Iceberg REST API. Для новых Iceberg-проектов чаще выбирают отдельный REST-каталог, а HMS оставляют для legacy-систем и переходных сценариев.

Можно ли использовать HMS с S3 вместо локальной файловой системы

Да. Для этого в metastore.warehouse.dir укажите путь s3a://... и добавьте параметры_ fs.s3a.*_ для доступа к хранилищу. Для VK Cloud Object Storage значения endpoint и учётных данных нужно брать из документации сервиса.

Заключение

В инструкции разобраны два способа запуска Hive Metastore: установка из архива для управляемого стенда и Docker-вариант для быстрого старта. Затем проверена связка с CedrusData Engine: от создания схемы до чтения тестовых данных TPC-DS.

Следующий шаг зависит от цели. Для production нужно перенести warehouse в объектное хранилище и настроить права доступа. Для Iceberg-таблиц стоит подключить Iceberg-коннектор. Если Hadoop-зависимости и Thrift больше не нужны, логичнее рассмотреть переход на Iceberg REST-каталог.

Оставьте заявку, чтобы получить консультацию

Наши специалисты свяжутся с вами в ближайшее время и ответят на все вопросы.

section-subscribe_2x.png

            Узнавайте о выходе новых статей в блоге первыми!

            Будем держать в курсе новостей и облачных трендов

            section-subscribe_2x.png
              section-subscribe_2x.png
              Ссылка скопирована
              Поделиться

              Почитать по теме

              _blog_head_14.png
              31 августа

              ИИ в облаке: где хранить данные и на чём считать модели

              _blog_head_140.png
              28 августа

              Unity Catalog, Apache Polaris, Nessie, CedrusData Catalog: сравниваем Iceberg-каталоги

              _blog_head_126.png
              27 августа

              PITR без сюрпризов: проверяем восстановление PostgreSQL

              40+ готовых сервисов