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
PRO

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

    View Slide

  2. 2. О чем расскажем
    • О нас, о нашем проекте
    • Что такое Airflow, основные понятия
    • Свои операторы, генерация задач
    • Резюмируем…

    View Slide

  3. 3. О нас
    Mail.Ru Group
    БЮ БЮ … БЮ Игры
    Студия 1 Студия 2 … Студия N

    View Slide

  4. 4. Игры
    • Мобильные (Android, iOS)
    • Консоли (PS, XBOX)
    • PC
    • Браузерные
    • Россия
    • Европа
    • Штаты
    • Китай

    View Slide

  5. 5. Аналитика игр
    • Финансовая
    • Маркетинговая
    • Стандартизированная аналитика:
    • Экономики
    • Конверсии
    • …
    • Продуктовая
    • Кросспроектная

    View Slide

  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
    Продюсеры
    ..
    Менеджеры
    ..
    Аналитики
    ..
    Геймдизы
    ..
    Команды
    разработки
    ...

    View Slide

  7. 7. Хранилище в цифрах
    300+ источников 2000+ таблиц
    130+ ТБ данных
    7500+ ежедневных
    процессов
    3000+ ad-hoc
    запросов
    20+ потребителей
    ad-hoc анализа
    данных
    ~ 1,5 года

    View Slide

  8. Что такое Airflow

    View Slide

  9. 9. История Apache Airflow
    • Октябрь 2014 – первый коммит в Airflow
    • Июнь 2015 – анонс на GitHub’е
    • Март 2016 – передан Apache

    View Slide

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

    View Slide

  11. 11. Установка Airflow
    • pip install apache-airflow
    • airflow initdb
    • airflow webserver -p 8080
    Результат: http://localhost:8080

    View Slide

  12. 12. Архитектура Airflow
    Airflow Webserver
    Airflow Scheduler
    Worker
    DAG
    MetaStore
    Log

    View Slide

  13. 13. Основной интерфейс

    View Slide

  14. 14. DAG – Directed Acyclic Graph

    View Slide

  15. 15. Дерево состояний

    View Slide

  16. 16. Интерфейс соединений

    View Slide

  17. 17. Интерфейс глобальных
    переменных

    View Slide

  18. 18. Операторы Airflow
    • BaseOperator (абстрактный)
    • PythonOperator
    • BashOperator
    • MySqlOperator, PostgresOperator,
    OracleOperator,…
    • HiveOperator, HiveToMySqlTransfer,
    MsSqlToHiveTransfer,…
    • HttpOperator
    • EmailOperator
    • BranchPythonOperator
    • DummyOperator
    • …

    View Slide

  19. 19. Сенсоры Airflow
    • BaseSensorOperator
    • ExternalTaskSensor
    • SqlSensor
    • TimeSensor, TimeDeltaSensor
    • HttpSensor
    • HdfsSensor
    • NamedHivePartitionSensor
    • …

    View Slide

  20. 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)
    }

    View Slide

  21. 21. Пример простого DAG’а
    dag = DAG('tutorial',
    default_args=default_args)

    View Slide

  22. 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)

    View Slide

  23. 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)

    View Slide

  24. 24. Пример простого DAG’а
    t2 << t1 >> t3
    t2.set_upstream(t1)
    t3.set_upstream(t1)

    View Slide

  25. 25. Пример простого DAG’а

    View Slide

  26. Разработка своих операторов,
    генерация задач

    View Slide

  27. 27. Airflow Plugins
    • В Airflow существует plugins manager для интеграции внешних
    модулей в ядро Airflow
    • $AIRFLOW_HOME/plugins.

    View Slide

  28. 28. Базовые классы
    • BaseHook – базовый класс для всех hook’ов,
    переопределяем __init__, run, get_conn
    • BaseOperator – базовый класс для всех
    операторов, переопределяем __init__, execute
    • BaseSensorOperator – базовый класс для всех
    сенсоров, переопределяем __init__, poke
    • AirflowException – базовое исключение

    View Slide

  29. 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):

    return session
    def run(self, params=None):
    logging.info("Run something")

    View Slide

  30. 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")

    View Slide

  31. 31. Мой Sensor
    class MyRestApiSensor(BaseSensorOperator):
    template_fields = ('xcom_task_id',)
    @apply_defaults
    def __init__(self, *args, **kwargs):

    def poke(self, context):

    View Slide

  32. 32. Видимость Plugin’ов
    class MyRestApiPlugin(AirflowPlugin):
    name = "my_rest_api_plugin"
    operators = [MyRestApiSensor, MyRestApiRequestOperator]
    hooks = [MyRestApiHook]

    View Slide

  33. 33. Генерация задач и DAG’ов в
    Airflow
    Если
    • Процессы однотипные с разной
    параметризацией
    • Просто большое количество однотипных
    задач или DAG’ов
    Генерация задач
    • Цикл внутри DAG’а
    • Отдельная функция
    • Отдельный модуль

    View Slide

  34. 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')

    View Slide

  35. Итоги

    View Slide

  36. 36. Airflow – это история …
    Про НЕ про
    Batch-процессы Streaming, MQ
    Сравнительно небольшой
    командой делать много и
    быстро
    Большие команды
    Open Source и грамотного
    про-активного DevOps-а
    Enterprise, консалтинг,
    поддержка вендора
    Новый источник/потребитель,
    знаем специфику, делаем
    оператор – Profit!
    Новый источник/потребитель,
    ждем патч/версию с нужным
    коннектором/драйвером,
    который не будет работать
    так как вам хочется

    View Slide

  37. 37. Аналоги Airflow
    https://github.com/spotify/luigi
    Pinball
    https://github.com/pinterest/pinball

    View Slide

  38. 38. Хабрахабр
    https://habrahabr.ru/company/mailru/blog/339392/
    Airflow — инструмент, чтобы удобно и быстро
    разрабатывать и поддерживать batch-процессы
    обработки данных
    https://habrahabr.ru/company/mailru/blog/344398/
    Airflow Workshop: сложные DAG’и без костылей

    View Slide

  39. 39. Телеграмм группа
    https://t.me/ruairflow
    @ruairflow

    View Slide

  40. Спасибо!
    Юрий Емельянов
    Архитектор DWH
    t.me/yuryemelyanov
    Дина Сафина
    Разработчик DWH
    t.me/aniiid
    Олег Ильинский
    Разработчик DWH
    t.me/olin32e
    Вопросы?

    View Slide