# Кластеры Apache Hive™ Metastore

В сервисе Yandex MetaData Hub вы можете [создавать кластеры Apache Hive™ Metastore](../operations/metastore/cluster-create.md).

[Apache Hive™ Metastore](https://cwiki.apache.org/confluence/display/hive/design#Design-Metastore) — это сервер табличных метаданных, который:

* Предоставляет клиентским приложениям информацию о том, где брать данные для обработки и как их интерпретировать.
* Сохраняет метаданные таблиц между запусками вычислительных кластеров с коротким временем жизни.
* Делит пространство данных между одновременно работающими кластерами.
* Связывает разнородные ETL-системы и инструменты для работы с общими данными и упрощает их развертывание.
* Обеспечивает [отказоустойчивость](../../architecture/fault-tolerance.md), масштабирование хранилища и резервное копирование метаданных.
* Упрощает отправку логов и метрик, процессы обновления и миграции.
* Играет ключевую роль в облачных сценариях обработки данных, позволяя различным инструментам (Spark, Trino, Hive) работать с одними и теми же метаданными.

Ряд продуктов Apache®, среди которых [Hive](https://hive.apache.org/), [Spark](https://spark.apache.org/) и [Impala](https://impala.apache.org/overview.html), поддерживает работу с Apache Hive™ Metastore.

## Назначение Apache Hive™ Metastore {#metastore-objectives}

При работе с большими данными и аналитикой в облаке часто возникает вопрос о преобразовании наборов файлов в таблицы, с которыми удобно работать через SQL. Apache Hive™ Metastore представляет собой _персистентную_ базу данных со словарем данных. Персистентность означает, что информация сохраняется на диск и остается доступной после выключения компьютера или перезапуска системы. Словарь данных содержит набор определений, описывающих структуру и формат данных. Apache Hive™ Metastore хранит метаданные о таблицах, физически расположенных в Yandex Object Storage. В нем содержится информация о местоположении файлов с данными, их организации, структуре колонок, типах данных, партиционировании и других аспектах. По сути, Apache Hive™ Metastore создает абстракцию над сырыми файлами, преобразуя их в логические таблицы для работы через SQL.

Это можно сравнить с каталогизацией книг в библиотеке. В большой библиотеке с тысячами книг без каталога пришлось бы проверять все полки в поисках нужной книги. Каталог позволяет быстро определить точное местоположение книги. Apache Hive™ Metastore выполняет аналогичную функцию для данных в Object Storage.

В [реляционных базах данных](../../glossary/relational-databases.md) (Oracle, PostgreSQL) словарь данных встроен в саму СУБД. При создании таблицы в PostgreSQL информация о ее структуре сохраняется в системных таблицах внутри той же базы данных. Однако в экосистеме больших данных, где файлы могут храниться отдельно от средств их обработки, требуется отдельный сервис для хранения этой информации — Apache Hive™ Metastore.

## Версии Apache Hive™ Metastore {#versions}

В Yandex Cloud доступны следующие версии Apache Hive™ Metastore:

#|
|| **Версия Apache Hive™ Metastore** | **Особенности** ||
|| 3.1 | Подключение осуществляется по протоколу Thrift на порту 9083. ||
|| 4.0 | Подключение осуществляется по протоколу Thrift на порту 9083. ||
|| 4.2 | Поддерживает два протокола подключения: Thrift и REST. ||
|#

Доступны версии 3.1, 4.0 и 4.2.

{% note warning %}

Для интеграции кластера Apache Hive™ Metastore с сервисом [Yandex Managed Service for Apache Spark™](../../managed-spark/index.md) требуется соответствие версий:

* версия Apache Spark™ 3.5.7 работает с версией Apache Hive™ Metastore 3.1;
* версия Apache Spark™ 4.0.0 работает с версиями Apache Hive™ Metastore 3.1 и выше.

При необходимости версию Apache Hive™ Metastore 3.1 можно повысить последовательно: 3.1 → 4.0 → 4.2, но понизить версию 4.2 до 3.1 невозможно.

{% endnote %}

## Протоколы подключения {#connection-protocols}

Начиная с версии 4.2.0 Apache Hive™ Metastore поддерживает два протокола подключения:

* **Thrift** — протокол на порту 9083. Доступен во всех версиях Apache Hive™ Metastore.
* **REST** — протокол на порту 9001. Доступен с версии 4.2.0. Это HTTP API для работы с Iceberg-таблицами.

## Конфигурация кластера Apache Hive™ Metastore {#presets}

Конфигурация определяет вычислительные мощности, которые выделяются для кластера. Доступны два типа конфигураций:

* **standard** — 2 vCPU и 8 ГБ RAM.

    Для этой конфигурации соотношение количества гигабайт RAM к количеству vCPU равно 4:1.

* **cpu-optimized** — 2 vCPU и 4 ГБ RAM.

    Для этой конфигурации соотношение количества гигабайт RAM к количеству vCPU уменьшено и равно 2:1.

Конфигурацию можно выбрать при [создании кластера](../operations/metastore/cluster-create.md) или изменить при его [редактировании](../operations/metastore/cluster-update.md).

## Сценарии использования {#scenarios}

Apache Hive™ Metastore сам по себе не решает бизнес-задачи, но становится необходимым инструментом в определенных сценариях использования. 

### Работа с данными из разных аналитических инструментов {#analytic-tools}

В современных архитектурах обработки данных часто используется несколько инструментов для работы с одними и теми же данными в Object Storage. Это обусловлено тем, что разные инструменты оптимальны для различных задач. Например, Apache Spark™ эффективен для массовой обработки данных и ETL-процессов (Extract, Transform, Load), в то время как Trino лучше подходит для интерактивной аналитики и быстрых запросов.

Без единого кластера каждый инструмент будет поддерживать собственную копию метаданных, что создает проблемы при изменении структуры данных. При добавлении новой колонки в таблицу и обновлении метаданных в Apache Spark™, без соответствующего обновления в Trino, запросы из Trino будут возвращать неполные данные или приводить к ошибкам.

Apache Hive™ Metastore решает эту проблему, предоставляя единый источник истины для всех метаданных. Структура таблицы описывается один раз, и все подключенные инструменты автоматически получают доступ к актуальной информации. Это не только упрощает администрирование, но и значительно снижает риск ошибок из-за несогласованности метаданных.

В ситуации, когда команда аналитиков использует Trino для интерактивных запросов, а команда инженеров данных применяет Apache Spark™ для ETL-процессов, единый Apache Hive™ Metastore обеспечивает согласованность представления данных для обеих команд, гарантируя точность результатов.

### Управление жизненным циклом кластеров {#cluster-lifecycle}

Одно из основных преимуществ облачных вычислений — возможность оплаты только за фактически использованные ресурсы. Это особенно актуально для задач обработки данных с периодическим характером.

В Yandex Cloud многие клиенты используют мощные вычислительные кластеры (Yandex Data Processing с Apache Spark™ или собственные кластеры Apache Hadoop®) только для периодических задач — формирования отчетов, ночных пакетных обработок данных, обновления аналитических моделей и других подобных операций.

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

Более эффективный подход заключается в создании кластеров на время выполнения задачи с последующим удалением. Однако в традиционной архитектуре Apache Hadoop® Apache Hive™ Metastore является частью кластера, и при удалении кластера происходит потеря всех метаданных о таблицах. При следующем запуске потребуется заново определять структуру таблиц, что трудоемко и чревато ошибками.

Отдельный управляемый Apache Hive™ Metastore решает эту проблему. Он существует независимо от вычислительных кластеров и продолжает хранить все метаданные после удаления кластеров. При создании нового кластера для следующего сеанса обработки он подключается к тому же Apache Hive™ Metastore и получает доступ ко всем определениям таблиц.

В Yandex Cloud многие пользователи реализуют подобный сценарий через Managed Service for Apache Airflow™ — сервис для оркестрации рабочих процессов. Managed Service for Apache Airflow™ по расписанию создает мощные кластеры Yandex Data Processing для обработки данных, а после завершения расчетов удаляет их для оптимизации затрат. Все метаданные сохраняются в отдельном управляемом Apache Hive™ Metastore, обеспечивая бесшовный процесс для пользователей.

### Работа с современными форматами данных для аналитики {#analytic-tasks}

В последние годы появились новые форматы данных, специально разработанные для аналитических задач: Apache Iceberg, Delta Lake, Apache Hudi. Эти форматы значительно превосходят традиционные (CSV или Parquet) по функциональности и удобству использования.
Они обеспечивают следующие возможности:

* атомарные транзакции при записи данных;
* контроль версий данных и путешествие во времени (time travel);
* схематизация и эволюция схемы;
* оптимизация таблиц и управление их компактностью;
* изоляция запросов от параллельных записей.

Для реализации этих функций форматы, подобные Iceberg и Delta Lake, требуют централизованного управления метаданными. Им необходимо хранилище для информации о версиях таблиц, транзакциях, изменениях схемы и других аспектах. Apache Hive™ Metastore предоставляет оптимальную инфраструктуру для этой цели.

Без Apache Hive™ Metastore работа с этими продвинутыми форматами была бы значительно сложнее, а некоторые функции вообще были бы недоступны. С Apache Hive™ Metastore доступны все преимущества современных форматов данных без необходимости создания собственной инфраструктуры для управления метаданными.

В Yandex Cloud Apache Hive™ Metastore особенно полезен при создании озер данных ([Data Lake](../../glossary/datalake.md)) и озер аналитических данных (Data Lakehouse) с использованием форматов Delta Lake и Iceberg. Он обеспечивает необходимую инфраструктуру для хранения метаданных этих форматов, делая их использование простым и надежным.

## Интеграция Apache Hive™ Metastore с сервисами Yandex Cloud {#integrations}

В Yandex Cloud Apache Hive™ Metastore интегрируется с другими сервисами, расширяя их возможности для работы с данными и упрощая создание комплексных решений.

### Yandex Data Processing и Apache Hive™ Metastore {#data-processing}

[Yandex Data Processing](../../data-proc/concepts/index.md) — это сервис для запуска распределенных вычислений на базе [Apache Spark™](https://spark.apache.org/), [Apache Hive](https://hive.apache.org/) и других инструментов экосистемы Apache Hadoop®. Apache Spark™ активно использует Apache Hive™ Metastore для хранения схем таблиц и доступа к данным через SQL-интерфейс.

Подключение Yandex Data Processing к управляемому Apache Hive™ Metastore в Yandex Cloud осуществляется просто: при создании кластера указывается URI Apache Hive™ Metastore в дополнительных настройках. После этого Apache Spark™ автоматически подключается к Apache Hive™ Metastore и получает доступ ко всем определенным в нем таблицам.

Это открывает широкие возможности для работы с данными:

* использование SparkSQL для выполнения сложных аналитических запросов к данным в Object Storage;
* работа разных кластеров Yandex Data Processing с одними и теми же таблицами без дублирования определений;
* создание и удаление кластеров по мере необходимости без потери метаданных о таблицах.

Например, Yandex Data Processing может использоваться для создания ETL-пайплайнов, которые читают данные из различных источников, преобразуют их и записывают в таблицы, определенные в Apache Hive™ Metastore. Затем эти данные будут доступны для аналитики через любой другой сервис, подключенный к тому же Apache Hive™ Metastore.

### Managed Service for Trino и Apache Hive™ Metastore {#managed-trino}

Trino — это распределенный SQL-движок для аналитических запросов, который может работать с различными источниками данных, включая файлы в Object Storage. В Yandex Cloud доступен сервис [Managed Service for Trino](../../managed-trino/quickstart.md) с возможностью подключения к Apache Hive™ Metastore.

Trino использует систему коннекторов для доступа к различным источникам данных. Для работы с данными через Apache Hive™ Metastore применяется коннектор Hive. При [создании кластера Managed Service for Trino](../../managed-trino/operations/cluster-create.md) можно добавить каталог с типом **Hive** и указать URI Apache Hive™ Metastore, после чего Trino получит доступ ко всем таблицам, определенным в Apache Hive™ Metastore.

Интеграция Managed Service for Trino с Apache Hive™ Metastore особенно полезна для интерактивной аналитики. Аналитики могут выполнять SQL-запросы к данным в Object Storage без знания деталей их физического хранения. Они работают с абстракцией таблиц, а Apache Hive™ Metastore и Trino обеспечивают все аспекты, связанные с доступом к данным.

Например, бизнес-аналитик может подключиться к Managed Service for Trino через WebSQL или BI-инструмент, выполнить сложный аналитический запрос к данным, загруженным и обработанным через Yandex Data Processing, и получить результаты за несколько секунд. При этом не требуется знать физическое местоположение файлов, методы их партиционирования и формат записи — всю эту информацию Trino получает из Apache Hive™ Metastore.

## Текущие особенности работы с Apache Hive™ Metastore {#current-implementation}

На текущий момент при работе с управляемым Apache Hive™ Metastore в Yandex Cloud существует несколько важных особенностей, которые необходимо учитывать при проектировании и развертывании решений.

Первая особенность связана с доступностью сервиса. В настоящее время Apache Hive™ Metastore работает только с объектными хранилищами внутри Yandex Cloud и не поддерживает подключение к внешним S3-совместимым хранилищам. Это означает невозможность использования для работы с данными, хранящимися, например, в Amazon S3 или MinIO, развернутом в собственном дата-центре.

Кроме того, Apache Hive™ Metastore доступен только по внутреннему IP-адресу в виртуальной частной сети (VPC) и не имеет публичного DNS-имени. Это обеспечивает дополнительную безопасность, но требует, чтобы все сервисы, подключающиеся к Apache Hive™ Metastore, находились в той же VPC или имели настроенный сетевой доступ.

Вторая особенность касается сетевой безопасности. Для корректной работы Apache Hive™ Metastore необходима правильная настройка групп безопасности, разрешающих необходимый сетевой трафик. Без этого кластер может отображаться в состоянии `DEAD`, что затрудняет диагностику проблем (смотрите [инструкцию](../operations/metastore/configure-security-group.md) по настройке групп безопасности).

Подробнее о Apache Hive™ Metastore в [документации Apache®](https://cwiki.apache.org/confluence/display/hive/design#Design-Metastore).

## Примеры использования {#examples}

* [Перенос метаданных между кластерами Yandex Data Processing с помощью Apache Hive™ Metastore](../tutorials/metastore-import.md)
* [Совместная работа с таблицами Yandex Data Processing с использованием Apache Hive™ Metastore](../tutorials/sharing-tables.md)

_Apache® и [Apache Hive™](https://hive.apache.org/) являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и/или других странах._