Зачем вам Beekeeper или как очистить метаданные таблицы Apache Hive

Beekeeper Hive, обучение Hadoop SQL администратор, курсы Hive, обучение Hive Hadoop, курсы Hadoop, обучение Hive SQL, курсы Hive, обучение Hadoop, курсы Hadoop, администрирование кластера Hadoop курсы обучение, Школа Больших ДАнных Учебный центр Коммерсант

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

Для чего очищать потерянные метаданные в Apache Hive

Напомним, Apache Hive относится к стеку SQL-on-Hadoop и позволяет анализировать данные в HDFS с помощью SQL-подобного языка структурированных запросов (HiveQL). Чтобы сопоставить схемы таблиц и баз данных с информацией в HDFS, Hive использует хранилище метаданных (MetaStore), где хранится вся информация о таблицах базы данных в Presto и Hive. Подробнее об этом мы писали здесь. На практике Hive часто используется в качестве средства аналитики больших данных, хранящихся в корпоративных озерах на базе Hadoop HDFS. Поскольку работа с данными всегда носит эволюционный характер, некоторые наборы данных в Data Lake больше не используются. При этом могут возникнуть ситуации, когда данные существуют в файловой системе, но недоступны через HiveQL-запрос, например, при удалении раздела во внешней таблице Hive. Таким образом, наборы данных, на которые не ссылается Hive, становятся устаревшими, «потерянными», путают пользователей и могут повлечь ненужные расходы на попытки их обработки [1].

Чтобы решить проблему устаревших данных, американская travel-компания Expedia Group разработала сервис под названием Beekeeper. Изначально он был создан для собственных нужд, а затем исходный код этого проекта был выложен на Github под лицензией Apache 2.0 [2]. Далее мы рассмотрим, как устроен Beekeeper и какова его польза для администратора Hadoop и пользователя Apache Hive.

Что такое Beekeeper и как он работает с Hive-таблицами

Beekeeper развивает идею другого open-source проекта Expedia Group под названием Circus Train, который копирует наборы данных Hive как неизменяемые моментальные снимки, чтобы обеспечить надежную согласованность и изоляцию реплицированного хранилища метаданных за счет указания на новый snapshot только при успешном завершении. В результате остается множество snapshot’ов, на которые Hive Metastore больше не ссылается. Поэтому Circus Train включает модуль Housekeeping для последующего удаления этих файлов.

Именно модуль Housekeeping был переписан и обновлен в виде проекта Beekeeper – автономного сервиса для удаления устаревших данных, на которые больше не ссылается Hive Metastore.

Beekeeper использует Apiary — озеро данных федеративного облака с открытым исходным кодом — для обнаружения изменений в Hive Metastore. Один из компонентов Apiary, Metastore Listener, фиксирует события Hive и публикует их как сообщения в топике SNS (Simple Notification Service, простой сервис обмена сообщениями). Beekeeper использует эти сообщения для обнаружения изменений в Hive Metastore и выполнения соответствующих удалений.

Beekeeper состоит из трех отдельных Java-приложений на основе Spring:

  • Scheduler Apiary — приложение, которое планирует пути и метаданные для удаления в общей базе данных, с одной таблицей для путей без ссылок, а другой – для метаданных с истекшим сроком действия. Это приложение периодически опрашивает очередь SQS Apiary на предмет событий Hive Metastore и вставляет пути S3 и таблицы Hive в базу данных, планируя их удаление.
  • Path Cleanup – приложение для удаления путей, на которые нет ссылок, периодически запрашивая их у базы данных.
  • Metadata Cleanup — приложение, которое удаляет метаданные с истекшим сроком действия, периодически запрашивая их у базы данных

Свойство «без ссылки» может быть добавлено в Hive-таблицы, чтобы определять, когда ссылки на пути перестают существовать. Такая проверка запускается следующими событиями над таблицами Hive:

  • alter_partition – изменение раздела;
  • alter_table – изменение таблицы;
  • drop_partition – удаление раздела со всеми данными и структурой;
  • drop_table – удаление таблицы со всеми данными и структурой.

По умолчанию события alter_partition и alter_table не требуют дополнительной настройки Hive-конфигураций. Другие типы событий рекомендуется внести в белый список для каждой таблицы, чтобы избежать непредвиденной потери данных. Таким образом, работа Beekeeper выглядит так [2]:

  • Таблица Hive настраивается с параметром remove.unreferenced.data = true;
  • с таблицей выполняется операция, в результате которой некоторые метаданные теряются, например, имезняется или удаляется раздел и пр.;
  • случившиеся при этом события Hive Metastore прослушивает Apiary Metastore Listener;
  • Beekeeper собирает из очереди события Hive с помощью Apiary Receiver;
  • Beekeeper обрабатывает эти сообщения и планирует удаление потерянных путей, добавляя их в базу данных;
  • запланированные к удалению пути удаляются после настраиваемой задержки, по умолчанию равной 3 дня.

Также Beekeeper 3.1.0 поддерживает удаление временных таблиц из озера данных, для которых определен срок жизни (TTL, Time-to-Live). Beekeeper будет отслеживать их и обеспечивать удаление метаданных таблицы и базовых данных после достижения указанного TTL. Для партиционированных таблиц TTL будет применяться для каждого раздела. Конкретный раздел будет удален, как только будет достигнут его TTL, а соответствующая таблица будет удалена только тогда, когда не останется никаких разделов. Это полезно, когда пользователи хотят работать с данными в режиме скользящего окна, например, удалить все данные старше 30 дней. Для не партиционированных таблиц TTL будет применен ко всей таблице сразу: она будет удалена при достижении заданного срока. Это пригодится, если необходимо создавать временные таблицы, например, для тестирования [3].

При этом важно знать о некоторых проблемах TTL-функции, которые разработчики планируют устранить в будущем [2]:

  • если таблица или раздел удаляются пользователем до истечения TTL-срока, на связанные с ними пути не будет ссылок и они не будут очищены. Избежать этого можно, добавив в таблицу свойство unreferenced. Но оно прослушивает любое drop-событие в этой таблице, поэтому любой путь для таблицы/раздела, удаленный Beekeeper во время очистки TTL, будет снова запланирован для удаления в таблице очистки без ссылки.
  • если переименовать партиционированную таблицу с существующими разделами, эти разделы не будут удалены через drop до тех пор, пока не истечет TTL-срок таблицы. К примеру, таблица создается с задержкой очистки в 2 дня и в нее добавляется раздел. Задержка изменяется на 10 дней, а затем таблица переименовывается. В текущем выпуске Beekeeper существующий раздел не будет переназначен для удаления из новой таблицы, а удалится вместе с ней через 10 дней вместо 2.

Впрочем, несмотря на указанные проблемы, Beekeeper решает одну из важных ежедневных задач дата-инженера и администратора Hadoop Hive, позволяя автоматически очищать устаревшие пути и потерянные метаданные. Для этого к настройкам Hive-таблицы следует добавить несколько конфигураций [2]:

  • beekeeper.remove.unreferenced.data = true – необходимо, чтобы Beekeeper отслеживал таблицу на предмет потерянных данных;
  • unreferenced.data.retention.period = X, где X – это продолжительность задержки между планированием и удалением в формате ISO_8601, например, P7D или PT3H, по умолчанию равен 3 дня;
  • beekeeper.hive.event.whitelist = X, где X – это список типов событий, разделенных запятыми, для внесения в белый список потерянных данных: alter_partition, alter_table, drop_table, drop_partition;
  • remove.expired.data = true – необходим для включения TTL для Hive-таблицы, который будет отслеживать Beekeeper;
  • beekeeper.expired.data.retention.period = X, где X – это продолжительность TTL для таблицы в формате ISO_8601, например, P7D или PT3H, по умолчанию равен 30 дней.

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

Источники

  1. https://medium.com/expedia-group-tech/introducing-beekeeper-35ab8b770f23
  2. https://github.com/ExpediaGroup/beekeeper
  3. https://medium.com/expedia-group-tech/introducing-beekeeper-time-to-live-ttl-384760405fd3
Поиск по сайту