Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Airflow – платформа для разработки, планирования и мониторинга рабочих процессов

Airflow – платформа для разработки, планирования и мониторинга рабочих процессов

Дина Сафина, Юрий Емельянов и Олег Ильинский (Mail.Ru Group) @ Moscow Python Meetup 52
"Команда DWH игрового направления Mail.Ru Group расскажет о своем проекте, основных понятиях и архитектуре Airflow; фичах и программируемых операторах Airflow. А также резюмируют, где можно и нужно Airflow, а где можно, но не нужно :)"
Видео: http://www.moscowpython.ru/meetup/52/airflow/

Moscow Python Meetup

January 24, 2018
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Airflow – платформа для разработки, планирования и мониторинга рабочих процессов

    Юрий Емельянов Архитектор DWH t.me/yuryemelyanov Дина Сафина Разработчик DWH t.me/aniiid Олег Ильинский Разработчик DWH t.me/olin32e
  2. 2. О чем расскажем • О нас, о нашем проекте

    • Что такое Airflow, основные понятия • Свои операторы, генерация задач • Резюмируем…
  3. 3. О нас Mail.Ru Group БЮ БЮ … БЮ Игры

    Студия 1 Студия 2 … Студия N
  4. 4. Игры • Мобильные (Android, iOS) • Консоли (PS, XBOX)

    • PC • Браузерные • Россия • Европа • Штаты • Китай
  5. 5. Аналитика игр • Финансовая • Маркетинговая • Стандартизированная аналитика:

    • Экономики • Конверсии • … • Продуктовая • Кросспроектная
  6. Потребители Транспорт данных в хранилище Сервисы для работы с данными

    Хранение и вычисление 6. Архитектура платформы DB logs api DB DB Игра #1 DB logs api DB DB Игра #2 … DB logs api DB DB Игра #N DB logs api DB DB Кросс- игровые сервисы GAMESTAT Hue Zeppelin Jupyter Hub ETL ETL Продюсеры .. Менеджеры .. Аналитики .. Геймдизы .. Команды разработки ...
  7. 7. Хранилище в цифрах 300+ источников 2000+ таблиц 130+ ТБ

    данных 7500+ ежедневных процессов 3000+ ad-hoc запросов 20+ потребителей ad-hoc анализа данных ~ 1,5 года
  8. 9. История Apache Airflow • Октябрь 2014 – первый коммит

    в Airflow • Июнь 2015 – анонс на GitHub’е • Март 2016 – передан Apache
  9. 11. Установка Airflow • pip install apache-airflow • airflow initdb

    • airflow webserver -p 8080 Результат: http://localhost:8080
  10. 18. Операторы Airflow • BaseOperator (абстрактный) • PythonOperator • BashOperator

    • MySqlOperator, PostgresOperator, OracleOperator,… • HiveOperator, HiveToMySqlTransfer, MsSqlToHiveTransfer,… • HttpOperator • EmailOperator • BranchPythonOperator • DummyOperator • …
  11. 19. Сенсоры Airflow • BaseSensorOperator • ExternalTaskSensor • SqlSensor •

    TimeSensor, TimeDeltaSensor • HttpSensor • HdfsSensor • NamedHivePartitionSensor • …
  12. 20. Пример простого DAG’а default_args = { 'owner': 'airflow', 'depends_on_past':

    False, 'start_date': datetime(2018, 1, 1), 'email': ['[email protected]'], 'email_on_failure': True, 'email_on_retry': False, 'retries': 1, 'retry_delay': timedelta(minutes=5) }
  13. 22. Пример простого DAG’а t1 = BashOperator(task_id='print_date', bash_command='date', dag=dag) t2

    = BashOperator(task_id='sleep', bash_command='sleep 5', retries=3, dag=dag)
  14. 23. Пример простого DAG’а templated_command = """ {% for i

    in range(5) %} echo "{{ ds }}" echo "{{ macros.ds_add(ds, 7)}}" {% endfor %} """ t3 = BashOperator( task_id='templated', bash_command=templated_command, dag=dag)
  15. 27. Airflow Plugins • В Airflow существует plugins manager для

    интеграции внешних модулей в ядро Airflow • $AIRFLOW_HOME/plugins.
  16. 28. Базовые классы • BaseHook – базовый класс для всех

    hook’ов, переопределяем __init__, run, get_conn • BaseOperator – базовый класс для всех операторов, переопределяем __init__, execute • BaseSensorOperator – базовый класс для всех сенсоров, переопределяем __init__, poke • AirflowException – базовое исключение
  17. 29. Мой Hook class MyRestApiHook(HttpHook): def __init__(self, http_conn_id='conn_MyRestApi_api'): self.http_conn_id =

    http_conn_id def get_conn(self, endpoint, params=None): <do something> return session def run(self, params=None): logging.info("Run something")
  18. 30. Мой Operator class MyRestApiOperator(BaseOperator): template_fields = ('my_rest_api_param',) template_ext =

    () ui_color = '#f4a460' @apply_defaults def __init__(self, my_rest_api_param, *args, **kwargs): super(MyRestApiOperator, self).__init__(*args, **kwargs) def execute(self, context): logging.info("Execute loading")
  19. 33. Генерация задач и DAG’ов в Airflow Если • Процессы

    однотипные с разной параметризацией • Просто большое количество однотипных задач или DAG’ов Генерация задач • Цикл внутри DAG’а • Отдельная функция • Отдельный модуль
  20. 34. Генерация тасков и дагов в Airflow { "connection_id": "source_conn_mysql",

    "schema_name": "source_schema", "table_name": "source_table", "columns_list": "id, time, user_id, user_level, …", "hive_schema_name": "target_schema", "hive_table_name": "target_table", "load_type": "increment", "hive_partition_column": "log_dt", "timestamp_column": "time", "timestamp_format": "unix_timestamp" } load_from_source_to_hive_tasks('tables.json')
  21. 36. Airflow – это история … Про НЕ про Batch-процессы

    Streaming, MQ Сравнительно небольшой командой делать много и быстро Большие команды Open Source и грамотного про-активного DevOps-а Enterprise, консалтинг, поддержка вендора Новый источник/потребитель, знаем специфику, делаем оператор – Profit! Новый источник/потребитель, ждем патч/версию с нужным коннектором/драйвером, который не будет работать так как вам хочется
  22. 38. Хабрахабр https://habrahabr.ru/company/mailru/blog/339392/ Airflow — инструмент, чтобы удобно и быстро

    разрабатывать и поддерживать batch-процессы обработки данных https://habrahabr.ru/company/mailru/blog/344398/ Airflow Workshop: сложные DAG’и без костылей
  23. Спасибо! Юрий Емельянов Архитектор DWH t.me/yuryemelyanov Дина Сафина Разработчик DWH

    t.me/aniiid Олег Ильинский Разработчик DWH t.me/olin32e Вопросы?