14 декабря 2023 года вышел очередной релиз Apache AirFlow, который содержит более 20 новых фичей, 60 улучшений и 50 исправлений. Знакомимся с самыми главными для дата-инженера новинками выпуска 2.8.
ТОП-10 новинок Apache AirFlow 2.8
Многие обновления в версии 2.8 направлены на расширение возможностей создания DAG, улучшение ведения журналов и исправление прежних функций. В частности, выполнено предложение по улучшению AirFlow (AIP, AirFlow Improvement Proposal), связанное с хранением объектов.
Из-за того, что обмен данными между задачами и DAG происходит через XCom, сохраняемый в базе данных метаданных AirFlow, передавать большой объем не получается. Даже при использовании внешних систем хранения данных, в AirFlow не было единого и согласованного способа доступа к ним. А обработка DAG полностью привязана к файловой системе, смонтированной в локальной системе. Чтобы снять это ограничение, в версии 2.8 добавлен уровень абстракции над хранилищами объектов, такими как LocalFilesystem, S3, GCS и Azure Blob Storage. Это позволяет взаимодействовать с файлами, хранящимися в любой из этих систем, с помощью одного и того же кода, без использования множества пользовательских операторов типа XtoYTransferOperator. Такая возможность особенно полезна при передаче файлов, поскольку унифицирует код, улучшает его читаемость и поддержку. В версии 2.9 эта экспериментальная фича стала стандартизированным способом управления большими объемами данных для XCom и возможность обработки DAG из произвольного места, упрощая CI/CD.
Чтобы подписаться на определенные события в среде AirFlow, теперь можно использовать слушатели. Они работают как функции обратного вызова, но для всего экземпляра фреймворка, а не для конкретного DAG или задачи. Например, слушатель наборов данных позволяет подписаться на события создания и обновления набора данных. Это пригодится дата-инженеру, когда надо отправить уведомление при обновлении нескольких наборов данных или запустить внешний процесс на основе этих событий. Функция слушателя запускается каждый раз при срабатывании условий обратного вызова. Также можно добавить дополнительную логику для выполнения части функции только для определенных наборов данных. О том, что такое наборы данных и как их использовать, мы писали здесь.
В версии 2.8 добавлено несколько новых операторов ветвления и декораторов для запуска условной логики, т.е. задач ветвления в изолированных виртуальных средах Python: созданных во время выполнения (virtualenv) или уже существующих в среде AirFlow (external_python). Это оператор BranchPythonVirtualenvOperator и 2 декоратора: @task.branch_external_python и @task.branch_virtualenv.
Виртуальные Python-среды повышают надежность, но не исключают вероятность сбоя задачи, из-за внешних причин, например, когда рабочему процессу не хватило памяти или задача застряла в очереди и истекло ее время ожидания. Раньше для отладки подобных случаев дата-инженеру приходилось обращаться к журналам планировщика, исполнителя и прочих компонентов среды, чтобы выяснить причины сбоя. Теперь в версии 2.8 появился новый механизм TaskContextLogger, который перенаправляет журналы компонентов в журналы задач. Поэтому, если в задаче возникла проблема, не связанная с ней самой, эти логи все равно будут отображаться в пользовательском интерфейсе AirFlow, что довольно удобно. Эта функция включена по умолчанию, и ею можно управлять в конфигурации логирования enable_task_context_logger.
Еще довольно полезными обновлениями версии 2.8 можно назвать следующие:
- в целях безопасности необработанный HTML-код в документах DAG и описаниях параметров DAG теперь отключен по умолчанию. Это позволяет гарантировать, что авторы DAG не смогут внедрить вредоносный JavaScript в описания DAG или вызвать формы пользовательского интерфейса. Для этого был добавлен новый параметр allow_raw_html_descriptions со значением по умолчанию False. Также добавлен атрибут description_md вместе description_html и custom_html_form. Впрочем, можно восстановить предыдущее поведение, установив для параметра конфигурации значение True, если нужно разрешить использование необработанного HTML в описаниях и параметрах DAG.
- появился новый атрибут clear_number, который отслеживает, сколько раз был очищен запуск DAG;
- появилась возможность добавить описание к пулам, чтобы оно отображалось в пользовательском интерфейсе AirFlow;
- добавлен новый метод prev_end_date_success(), позволяющий указать дату окончания последнего успешного экземпляра задачи;
- для DAG без расписания запуска, больше не требуется назначенный файл start_date.
В заключение отметим, что также обновлено несколько представлений пользовательского интерфейса, которые повышают удобство работы с фреймворком. В частности, для ускорения ручного запуска DAG поля Run ID и Logical date скрыты, хотя их по-прежнему можно обновить в разделе Generated JSON Configuration and Dagrun Options. Также можно очищать экземпляры последующих задач при их выборе в представлении «Список экземпляров задач» (List Task Instance). А в представлении «Сетка» добавлена вкладка XCom, которая отображает XCom-объекты, созданные задачами. Об уязвимости этой версии и о том, как ее исправить, читайте в нашей новой статье.
Узнайте больше про Apache AirFlow и его практическое использование в дата-инженерии на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
- Data Pipeline на Apache AirFlow и Apache Hadoop
- AIRFLOW с использованием Yandex Managed Service for Apache Airflow™
Источники