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

Про Apache Airflow

Про Apache Airflow

Iuliia Volkova

November 27, 2018
Tweet

More Decks by Iuliia Volkova

Other Decks in Technology

Transcript

  1. Про Apache Airflow: - Изнутри: обзор основных компонентов и взаимодействие

    между ними - Основные направления кастомизации и существующие инструменты О чем сегодня говорим Про Google Composer: - Возможности - Архитектура - Плюсы/минусы/баги 2
  2. О спикере Юлия Волкова / Iuliia Volkova Python Developer в

    https://github.com/xnuinside https://www.linkedin.com/in/xnuinside/ Можно найти в Телеграмм каналах: @spbpython и @ruarflow Или лично @xnuinside Slack: apache-airflow.slack.com 3
  3. Apache Airflow - Платформа для создания Workflow (DAG), оркестрации, запуска

    задач (tasks). - Мониторинга дата пайплайнов, отслеживания состояний - Набор API и инструментов для кастомизации 4
  4. Версии Говорим про: • 1.9 • 1.10 • код в

    мастере https://github.com/apache/incubator-airflow - репозиторий pip install apache-airflow - забрать последнюю релизную версию 6
  5. Патчей для старых версий нет Apache Airflow не выпускают патчей

    для предыдущих версий 1.9, 1.8 Что делать? • Форк / апдейт 1.10.1 релиз 7
  6. Компоненты CLI Python API REST API WebBackend UI Metadata DB

    Scheduler Connectors (hooks, operators, sensors) Utils Python Library airflow.api airflow.utils / airflow.contrib .. connect with SQLAlchemy sql_alchemy_conn = Flask + Gunicorn Executor Auth Worker 10
  7. DAGFiles and DAGs DagsFolder dags_folder = AIRFLOW_HOME/dags DAGFile your_dag.py your_dag_package

    DagBag Все dag созданные в рамках всех DAGfiles внутри одной DagsFolder if settings.DAGS_FOLDER not in sys.path: sys.path.append(settings.DAGS_FOLDER) Все пакеты и скрипты внутри DagsFolder - видимы для импорта в рамках Airlfow Если есть в теле ‘DAG’ и ‘airflow’ - они интерпретируются (предполагая, что это даги) 14
  8. Что влияет на исполнение/запуск ДАГ Metadata DB БД. Храним даги,

    таски, стейты и т.д. Scheduler (DagFileProcessor Manager and etc) Процесс/job-а. Проверяем связки Даг - расписание - даг раны - таск инстансы чтобы решать что запускать. Executor Процесс. Который фактически выполняет код (исполняет логику таски/оператора ). Напрямую зависит от Executora Worker Процесс. Определяющий как будет запускаться воркер, его тип и логику управления воркерами. DAGFolder Храним DAGfile 15
  9. Как работает Scheduler airflow scheduler command → jobs.SchedulerJob(...) 17 This

    SchedulerJob runs for a specific time interval and schedules the jobs that are ready to run. It figures out the latest runs for each task and sees if the dependencies for the next schedules are met. If so, it creates appropriate TaskInstances and sends run commands to the executor. It does this for each task in each DAG and repeats.
  10. Легальные - Airflow Plugins - Создание своих Python Packages с

    утилитами - Использование возможностей зависимостей Airflow (Celery, Gunicorn and etc.) ** на самом деле тоже не гарантирована совместимость со стороны Airflow, используете настройки на свой страх и риск - Форк 20
  11. Легальные пути: import из своих пакетов Custom Python Package Пишем,

    что угодно, используем импортом из своего пакет в DAG File Наследование, monkey patch и т.д 21
  12. Packages и Airflow • Установка в env (стандартный Python путь)

    • Распаковка в Dag Folder с использованием .airflowignore Все даги/пакеты попадают в PYTHONPATH и могут импортироваться, переиспользоваться 22
  13. Легальные пути: Plugins Airflow Plugin Официально разрешено для: operators, sensors,

    hooks, executors, macros, admin_views, flask_blueprints, мenu_links, appbuilder_views, appbuilder_menu_items After the plugin is imported into Airflow, you can invoke it using statement like from airflow.{type, like "operators", "sensors"}.{name specificed inside the plugin class} import * 24
  14. Разница между использованием dag_folder и плагинов integrate_plugins() сreate_app() airflow webserver

    command dag_folder Читаем каждые 10/20/30 сек (настраиваемый промежуток времени) 1 раз Постоянно 26
  15. Коннекторы: Hooks, Operators, Sensors Как? Наследуемся от BaseHook, BaseOperator, BaseSensor

    Как ставим: Через свой custom python package или Airflow Plugins Где вызываем? В DAGfile по мере необходимости или в пакетах с операторами и сенсорами (верно для хуков) 30
  16. 31

  17. Читалки конфигов / скрипты генерации для DAG-ов Как? Как любой

    другой питоновский пакет/скрипт Как ставим: Cвой custom python package Где вызываем? В DAGfile 32
  18. 33

  19. Модифицировать UI / добавлять View Как? Используем Flask Как ставим:

    Airflow Plugins Где вызываем? Нигде. Грузится при старте Webserver 34
  20. 35

  21. from airflow import www templates_path = os.path.join(www.__path__[0], 'templates', 'airflow', 'dags.html')

    shutil.copy('{}/templates/dags/dags.html'.format(plugins_folder), templates_path) Использование Plugins для изменения базовых templates 36
  22. etc • Расширять существующий функционал - добавлять DagBags, добавлять TriggerRule

    и т.д. • Фиксить баги • Интегрироваться с системами мониторинга, дашбордами, репорт системами и т.д • Делать свои Executors, DagModels и тд. 37
  23. • Посмотреть трекер и мастер ветку, открытые пиары • Есть

    аналогичный тикет или PR, который не смерджен - откомментите, а лучше пинганите людей из списка мэинтейнеров https://issues.apache.org/jira/projects/AIRFLOW/issues/ - трекер Я хочу фичу / у меня нашелся баг 38
  24. Для ru: t.me/ruarflow (Telegram) Для en: • apache-airflow.slack.com • jira

    (трекер) • mail-лист: [email protected] Где попросить совет? 41
  25. Composer-Airflow Command Line $ gcloud composer environments run test-composer --location

    us-east1 --project gcp-project-ud trigger_dag -- dag_id Доступные команды: [backfill, clear, connections, dag_state, initdb, kerberos, list_dags, list_tasks, pause, pool, render, resetdb, run, task_failed_deps, task_state, test, trigger_dag, unpause, upgradedb, variables, version]. 45
  26. Конфигурационные ограничения Blocked Airflow Configurations, examples celery-celery_app_name, celery-worker_log_server_port, celery-broker_url, celery-celery_result_backend,

    celery-default_queue, celery-celery_config_options core-executor Full list: https://cloud.google.com/composer/docs/concepts/airflow-configurations 46
  27. Прочие приятности • Очень кривой даг в dag_folder. Фикс: понять,

    что деплоилось последним и попробовать откатить • Кто-то удалил airflow.cfg с бакета композера. Фикс: сделать фейковый овверайдинг конфига (добавить какие-нибудь не сильно значимые опции, типа, направления отображения дагов в UI https://cloud.google.com/composer/docs/how-to/managing/creating#overriding_airflow_configurations_whe n_creating_an_environment ) 47
  28. 48