Как запустить службу внешнего хранилища метаданных Apache Hive в AWS EKS

озеро данных, Data Lake, Apache Hive AWS EKS data lake, архитектура данных примеры курсы обучение, обучение архитекторов данных и дата-инженеров Apache Hive Delta Lake, Школа Больших Данных Учебный центр Коммерсант

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

Зачем нужно внешнее хранилище метаданных Apache Hive?

Apache Hive используется для доступа к данным, хранящимся в распределенной файловой системе Hadoop (HDFS) через стандартные SQL-запросы. Это NoSQL-хранилище обеспечивает управление распределенными данными и метаданными благодаря службе Hive Metastore, которая предоставляет интерфейс через экономичный протокол для чтения, записи и обновления метаданных для таких сред, как Apache Spark, Presto и пр. HDFS, в свою очередь, часто используется в качестве основы для озера данных (Data Lake), откуда BI-приложения и аналитические системы забирают нужную информацию.

При использовании Hive 3 с большим количеством подключений к хранилищу метаданных Hive, следует уменьшить значение параметра datanucleus.connectionPool.maxPoolSize или увеличить количество подключений, которые может обрабатывать сервер базы данных. Увеличение количества подключений связано с тем, как Hive вычисляет максимальное количество подключений JDBC.

Хранилища метаданных играют очень важную роль в работе Data Lake, о чем мы писали здесь. По умолчанию Hive записывает информацию хранилища метаданных в базу данных MySQL в файловой системе главного узла. Хранилище метаданных содержит описание таблицы и базовых данных, на основе которых она построена, включая имена разделов, типы данных и т.д. Когда кластер завершает работу, все его узлы отключаются, включая главный узел. При этом локальные данные теряются, поскольку файловые системы узла используют эфемерное хранилище. Если нужно сохранить хранилище метаданных, следует использовать внешнее хранилище за пределами кластера Apache Hive. Например, из сервисов Amazon это могут быть каталог данных Glue (только для EMR версии 5.8.0 или более поздней версии), RDS или Aurora.

Также можно запустить высокодоступную и масштабируемую службу Hive Metastore на AWS EKS, что соответствует безсерверной архитектуре обработки данных: не нужно поддерживать физический кластер для вычислений. Запуск только службы Hive Metastore на кластере AWS EMR будет стоить дорого, поскольку придется платить за сервис EMR и EC2 главного узла, но это не масштабируется, поскольку работает на одном EC2.

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

Запуск хранилища метаданных в AWS EKS

Напомним, AWS EKS – это управляемый сервис Kubernetes, который позволяет без труда запускать Kubernetes в облаке Amazon AWS и в локальной среде. Kubernetes – DevOps-системе с открытым исходным кодом для автоматизации развертывания и масштабирования контейнерных приложений, а также управления ими. Чтобы запустить внешнюю службу хранилища метаданных в AWS EKS, сперва надо создать Docker-образ для сервиса Hive Metastore. Файл Dockerfile устанавливает скомпилированную AWS версию Hive из репозитория AWS EMR и предоставляет порт 9083 thrift. Скрипт точки входа экспортирует необходимые переменные среды и динамически создает файл конфигурации hive-site.xml из JSON-файла, который содержит необходимые конфигурации NoSQL-СУБД и запускает службу хранилища метаданных. Этот скрипт использует файл JSON, который содержит ключ в качестве имени конфигурации Hive и значение в качестве значения конфигурации, чтобы динамически генерировать hive-site.xml во время выполнения, что делает конфигурацию приложения управляемой.

Далее следует создать развертывание Kubernetes, где конфигурации Hive предоставляются в качестве параметризованных входных данных для контейнера путем монтирования сопоставления конфигурации Kubernetes hive-config в виде файла в контейнере, который содержит конфигурации Hive в виде файла JSON. Имя пользователя и пароль базы данных MYSQL внедряются в качестве переменной среды в контейнер из секретного файла Kubernetes hive-metastore-secret. Чтобы сделать развертывание более масштабируемым, можно изменять количество подов Kubernetes в развертывании в зависимости от нагрузки.

Для этого пригодится соответствующий инструмент Kubernetes:

kubectl autoscale deployment hive-metastore-deployment --cpu-percent=70 --min=1 --max=10

Далее следует создать службу балансировки нагрузки. При использовании AWS EKS, Kubernetes создает балансировщик нагрузки AWS Classic, куда можно добавить собственные группы безопасности. Затем нужно создать DNS-запись Route53 для классического балансировщика нагрузки и использовать ее в необходимых приложениях или платформах, например,

pyspark --name my-spark-session --conf "spark.hive.metastore.uris=<dns_for_hive_metastore>:9083

В нашей новой статье вы узнаете о главных фичах свежего релиза Apache Hive 4.0.0. А освоить администрирование и эксплуатацию Apache Hive и других компонентов экосистемы Hadoop для хранения и аналитики больших данных вам помогут специализированные курсы в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://towardsaws.com/hive-metastore-service-on-eks-5409f96f98ed
  2. https://catalog.us-east-1.prod.workshops.aws/workshops/1f91e1d4-5587-40ff-8d5d-54fc86e0ddc1/en-US/intermediate/rds-backed-hive-metastore-integration
  3. https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-metastore-external-hive.html
Поиск по сайту