Постоянное хранение данных через DAG - PullRequest
0 голосов
/ 27 августа 2018

У меня есть пара групп доступности баз данных, которые создают временные кластеры EMS AWS, а затем завершают их после завершения работы. Я хотел бы создать новую группу обеспечения доступности баз данных, которая запускается ежедневно и генерирует отчет о каждом кластере EMR, созданный для этого дня, а также продолжительность его работы и отправку этого отчета различным людям по электронной почте.

Мне нужно сохранить значение идентификатора кластера EMR, чтобы у моего генератора отчетов был список всех идентификаторов кластеров EMR за этот день. Мне интересно, возможно ли мне изменить переменную Airflow для хранения этой информации, например, у меня может быть переменная Airflow, ключом которой является «EMR_CLUSTERS», а значением является строка JSON со всеми данными, которые я хочу записать. Или я могу использовать базу метаданных Airflow, которая уже используется для записи в новую таблицу там, где я могу записать эту информацию?

Какие есть варианты хранения постоянных данных в Airflow?

1 Ответ

0 голосов
/ 27 августа 2018

Любой из указанных вами вариантов будет работать:

  1. Переменная воздушного потока
  2. БД метаданных

A третий вариант будет сетевым хранилищем. Если вы используете распределенный поток воздуха, возможно, вы храните группы обеспечения доступности баз данных в сетевом хранилище и монтируете их в works / scheduler / webserver. В этом случае надежным выбором будет размещение файлового отчета в этом хранилище (и, возможно, отправка его по электронной почте и т. Д.).

Вы можете написать плагин , который будет работать с любым из этих 3, и он может отображать то, что было написано / отправлено, когда.

Переменные

Легко читать / писать , но немного небрежно, чтобы перезаписывать его каждый день IMO.

MetadataDB

Используйте SQLAlchemy для создания и чтения / записи таблиц, хранящих эту информацию. Вы можете получить сеанс в БД метаданных воздушного потока, выполнив:

from airflow import settings
session = settings.Session()

Сетевое хранилище

В этом случае просто читайте / записывайте файлы в обычном режиме.

...