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-сред, так как позволяет централизованно управлять метаданными, обеспечивает балансировку нагрузки и высокую доступность.
Классификация и интеграции
По типу хранилища
- Реляционные БД: MySQL, PostgreSQL, Oracle, MariaDB — наиболее распространённые варианты.
- Облачные сервисы: Amazon RDS, Amazon Aurora, Google Cloud SQL, Azure Database for PostgreSQL.
- Специализированные решения: В некоторых реализациях (например, Amazon EMR) используется Amazon DynamoDB в качестве backend-хранилища.
По интеграции с вычислительными движками
- 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 →