Открыть сервис

Hive Metastore

Hive Metastore — это центральный репозиторий метаданных для экосистемы Apache Hadoop, в первую очередь для Apache Hive, а также для других систем обработки данных, таких как Apache Spark, Apache Impala и Presto. Он хранит информацию о структуре таблиц (схемы, колонки, типы данных), их расположении в распределённой файловой системе (например, HDFS или Amazon S3), а также о разделах (партициях), сериализаторах/десериализаторах (SerDe) и свойствах таблиц. Metastore отделяет метаданные от самих данных, позволяя множеству вычислительных движков работать с одними и теми же данными, используя единую точку описания их структуры.

История и развитие

Проект Apache Hive, разработанный в Facebook (организация Meta признана экстремистской и запрещена в РФ), был открыт в 2008 году и изначально включал встроенную реляционную базу данных (Derby) для хранения метаданных. По мере роста масштабов использования Hive, встроенная база данных стала узким местом: она не поддерживала конкурентный доступ нескольких клиентов и не обеспечивала отказоустойчивость. В ответ на это была разработана архитектура, в которой Metastore работает как отдельный сервис (Thrift-сервер), подключающийся к внешней реляционной базе данных (например, MySQL, PostgreSQL, Oracle). Это позволило масштабировать систему и обеспечило транзакционную целостность метаданных.

В 2010-х годах, с распространением облачных хранилищ и появлением форматов файлов, таких как Parquet и ORC, а также табличных форматов (Apache Iceberg, Delta Lake, Apache Hudi), роль Metastore расширилась. Он стал не просто хранилищем схем, а ключевым компонентом для управления эволюцией схем, обеспечения ACID-транзакций на уровне таблиц (в Hive ACID) и интеграции с каталогами данных.

Архитектура и компоненты

Hive Metastore состоит из трёх основных уровней:

1. Интерфейс доступа (Thrift API)

Metastore предоставляет интерфейс на основе протокола Thrift (Apache Thrift). Клиенты (Hive, Spark, Impala и другие) отправляют запросы на создание, удаление, изменение таблиц, а также на получение информации о схеме. API поддерживает как синхронные, так и асинхронные вызовы.

2. Сервер Metastore

Сервер реализует логику обработки запросов. Он управляет кэшированием метаданных (например, в памяти JVM), проверяет права доступа (если настроена авторизация), преобразует запросы в SQL-запросы к базе данных и возвращает результаты клиентам. В современных реализациях (Hive 3.x и выше) сервер может работать в режиме высокой доступности (HA) через ZooKeeper.

3. База данных (Backend Store)

Это реляционная база данных, в которой физически хранятся все метаданные. Типичные таблицы в этой базе:

  • TBLSсписок всех таблиц.
  • COLUMNS_V2информация о колонках таблиц.
  • PARTITIONS — информация о партициях.
  • SDS — дескрипторы хранения (путь к данным, формат, SerDe).
  • DBS — список баз данных (схем).

Режимы работы

Существует три основных режима развёртывания Metastore:

  • Встроенный (Embedded): Metastore запускается в том же процессе, что и клиент (например, Hive CLI). Используется встроенная база данных Derby. Подходит только для разработки и тестирования, так как не поддерживает многопользовательский доступ.
  • Локальный (Local): Metastore работает как отдельный процесс на той же машине, что и клиент, но подключается к внешней базе данных (MySQL, PostgreSQL). Обеспечивает конкурентный доступ, но не масштабируется горизонтально.
  • Удалённый (Remote): Metastore работает как отдельный сервис (Thrift-сервер) на выделенном узле или кластере. Клиенты подключаются к нему по сети. Этот режим является стандартом для production-сред, так как позволяет централизованно управлять метаданными, обеспечивает балансировку нагрузки и высокую доступность.

Классификация и интеграции

По типу хранилища

По интеграции с вычислительными движками

  • Apache Hive: Основной потребитель, обеспечивает выполнение SQL-запросов над Hadoop.
  • Apache Spark: Через Spark SQL может читать метаданные из Hive Metastore, что позволяет Spark-приложениям работать с таблицами, созданными в Hive.
  • Apache Impala: Использует Hive Metastore для получения схемы таблиц, но имеет собственный кэш метаданных для ускорения запросов.
  • Presto / Trino: Подключаются к Hive Metastore для работы с таблицами в HDFS и облачных хранилищах.
  • Apache Flink: Может использовать Hive Metastore для чтения и записи данных в таблицы Hive.

Применение и значение

Hive Metastore является критическим компонентом в архитектуре озёр данных (Data Lake) и хранилищ данных (Data Warehouse) на базе Hadoop. Его основное значение:

  • Единое хранилище метаданных: Позволяет разным инструментам (Hive, Spark, Impala, Presto) работать с одними и теми же таблицами, не дублируя информацию о схеме.
  • Управление схемой: Хранит историю изменений схемы (evolution), что важно для поддержки обратной совместимости при изменении структуры данных.
  • Оптимизация запросов: Хранит статистику по таблицам (количество строк, размер, распределение данных), которую используют оптимизаторы запросов для выбора эффективного плана выполнения.
  • Поддержка партиционирования: Позволяет эффективно управлять данными, разбитыми на разделы (по дате, региону и т.д.), что ускоряет запросы с фильтрацией.
  • Безопасность и управление доступом: Интегрируется с Apache Ranger и Apache Sentry для разграничения доступа на уровне таблиц и колонок.

Критика и ограничения

Несмотря на широкое распространение, Hive Metastore имеет ряд недостатков:

  • Масштабируемость: При большом количестве таблиц (сотни тысяч) и партиций (миллионы) производительность сервера может снижаться из-за блокировок в базе данных и роста размера кэша.
  • Отсутствие нативной поддержки современных табличных форматов: Для работы с Iceberg, Delta Lake или Hudi требуется дополнительная настройка или использование прослоек (например, AWS Glue Catalog).
  • Сложность администрирования: Требуется настройка и мониторинг сервера Metastore, базы данных и ZooKeeper (для HA).
  • Неполная поддержка ACID: Хотя Hive ACID поддерживает транзакции, реализация имеет ограничения по производительности и совместимости с некоторыми движками.

Интересные факты

  • Hive Metastore является одним из самых старых и проверенных компонентов экосистемы Hadoop — он используется в production с 2009 года.
  • В 2020 году проект Apache Hive объявил о переходе Metastore в отдельный подпроект — Apache Hive Metastore, что подчеркнуло его независимость от Hive как такового.
  • Многие облачные сервисы (Amazon EMR, Google Cloud Dataproc, Azure HDInsight) предлагают управляемые версии Hive Metastore, что упрощает его развёртывание.
  • В 2023 году появилась альтернатива — Apache Polaris (открытый каталог данных), который может заменить Hive Metastore в некоторых сценариях, особенно в облачных средах.

Источники

  • Apache Hive Documentation: «Hive Metastore Administration»
  • «Hive — The Definitive Guide» by Edward Capriolo, Dean Wampler, Jason Rutherglen
  • Apache Software Foundation: «Hive Metastore Architecture»
  • Документация Amazon EMR: «Using the Hive Metastore»
  • Документация Apache Spark: «Hive Tables»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →