Airflow 1.10.10 包含自 1.10.9 以来的 199 个提交,包括 11 个新功能、43 项改进、44 个错误修复以及一些文档更改。

详情:

以下是一些值得注意的新功能(面向用户)

允许用户在 RBAC UI 中选择使用的时区

Web UI 默认以 UTC 显示时间。可以通过右上角的菜单(点击时钟激活)更改显示的时区。

截图: 允许用户在 RBAC UI 中选择使用的时区

详情: https://airflow.org.cn/docs/1.10.10/timezone.html#web-ui

注意: 此功能仅适用于 RBAC UI(通过在 airflow.cfg[webserver] 部分中设置 rbac=True 来启用)。

添加生产环境 Docker 镜像支持

Airflow 1.10.10 有全新的生产环境镜像(Alpha 质量)可用。您可以从 Apache Airflow Dockerhub 仓库拉取并开始使用它们。

有关使用生产镜像的更多信息,请参阅 https://github.com/apache/airflow/blob/master/IMAGES.rst#using-the-images。很快,这里将更新关于如何使用官方 Helm Chart 使用镜像的信息。

要拉取镜像,您可以运行以下命令之一

  • docker pull apache/airflow:1.10.10-python2.7
  • docker pull apache/airflow:1.10.10-python3.5
  • docker pull apache/airflow:1.10.10-python3.6
  • docker pull apache/airflow:1.10.10-python3.7
  • docker pull apache/airflow:1.10.10 (使用 Python 3.6)

允许从各种 Secret 后端检索 Airflow 连接和变量

从 Airflow 1.10.10 开始,用户将能够从环境变量中获取 Airflow 变量。

详情: https://airflow.org.cn/docs/1.10.10/concepts.html#storing-variables-in-environment-variables

引入了 Secret 后端的新概念,用于检索 Airflow 连接和变量。

从 Airflow 1.10.10 开始,用户可以使用相同的语法(无需修改 DAG 代码)从 airflow.cfg 中定义的 Secret 后端检索连接和变量。如果未定义后端,Airflow 将回退到环境变量,然后再回退到元数据数据库。

有关如何配置 Secret 后端的详情,请查看 https://airflow.org.cn/docs/1.10.10/howto/use-alternative-secrets-backend.html#configuration

截至 1.10.10,Airflow 支持以下 Secret 后端

  • Hashicorp Vault
  • GCP Secrets Manager
  • AWS Parameters Store

详情: https://airflow.org.cn/docs/1.10.10/howto/use-alternative-secrets-backend.html

使用 Hashicorp Vault 作为后端的配置示例

[secrets]
backend = airflow.contrib.secrets.hashicorp_vault.VaultBackend
backend_kwargs = {"url": "http://127.0.0.1:8200", "connections_path": "connections", "variables_path": "variables", "mount_point": "airflow"}

使用 DAG 序列化的无状态 Web 服务器

启用 DAG 序列化后,Web 服务器现在可以在无法访问 DAG 文件的情况下运行。我们在 1.10.7-1.10.9 中存在的两个限制(https://airflow.org.cn/docs/1.10.7/dag-serialization.html#limitations)已得到解决。

这样做主要的好处是对于大量 DAG,可以减少 Web 服务器的启动时间。如果没有 DAG 序列化,所有 DAG 都会在 Web 服务器启动时加载到 DagBag 中。

通过 DAG 序列化,会创建一个空的 DagBag,并且只有在需要时(即在首页点击特定 DAG 时)才会从数据库加载 DAG。

详情: https://airflow.org.cn/docs/1.10.10/dag-serialization.html

使用 Dummy Operator 的任务不再发送到执行器

Dummy Operator 实际上不执行任何工作,主要用于与 BranchPythonOperator 一起组织/分组任务。

以前,使用 Kubernetes Executor 时,执行器会启动一个完整的 worker Pod 来执行 Dummy 任务。在 Airflow 1.10.10 中,使用 Dummy Operator 的任务将由 Scheduler 调度和评估,但不会发送到 Executor。这应该能显著提高执行时间和资源利用率。

允许通过 UI 触发 DAG 时传递 DagRun 配置

通过 CLI 或 REST API 触发 DAG 时,可以以 JSON blob 的形式传递 DagRun 配置。

从 Airflow 1.10.10 开始,当用户点击 Trigger Dag 按钮时,会显示一个新屏幕确认触发请求,并允许用户传递 JSON 配置 blob。

截图: 允许通过 UI 触发 DagRun 时传递配置

详情: https://github.com/apache/airflow/pull/7312

更新指南

如果您正在将 Apache Airflow 从以前的版本更新到 1.10.10,请注意以下几点

  • 由于 1.10.10 包含 3 个数据库迁移,请在运行 pip install -U apache-airflow==1.10.10 后运行 airflow upgradedb

  • 如果您在 DAG 中使用了 none_failed 触发规则,请将其更改为使用新的 none_failed_or_skipped 触发规则。以前的实现中,none_failed 触发规则的实际行为是如果任务的所有父任务都跳过,则当前任务也会跳过。这与文档中关于该触发规则的描述不符。我们已更改实现以匹配文档,因此如果您需要旧的行为,请使用 none_failed_or_skipped

    更多详情请参阅 https://github.com/apache/airflow/pull/7464

  • 现在将空字符串设置到 Airflow 变量将返回空字符串,以前它返回 None

    示例

    >> Variable.set('test_key', '')
    >> Variable.get('test_key')
    

    上述代码以前返回 None,现在将返回 ''。

  • 当用户在 Airflow UI 中将任务标记为 success 时,将调用 on_success_callback 中定义的函数。

特别说明 / 弃用

Python 2

Python 2 已于 2020 年 1 月终止生命周期。Airflow Master 不再支持 Python 2。Airflow 1.10.* 将是最后一个支持 Python 2 的系列。

我们强烈建议用户使用 Python >= 3.6

使用 Airflow RBAC UI

Airflow 1.10.10 提供了两种 UI,默认的是基于 Flask-admin 的非 RBAC UI 和基于 Flask-appbuilder 的 UI。

基于 Flask-AppBuilder (FAB) 的 UI 允许基于角色的访问控制,并且比传统的基于 Flask-admin 的 UI 具有更高级的功能。可以通过在 airflow.cfg[webserver] 部分中设置 rbac=True 来启用此 UI。

基于 Flask-admin 的 UI 已被弃用,新功能将不再移植到其中。此 UI 仍将是 1.10.* 系列的默认 UI,但从 Airflow 2.0 开始将不再可用。

在 MacOS 上运行 Airflow

如果在 MacOS 上运行 Airflow 并且在 Scheduler 日志中收到以下错误,请在您的调度器环境中运行 export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

objc[1873]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called.
objc[1873]: +[__NSPlaceholderDate initialize] may have been in progress in another thread when fork() was called. We cannot safely call it or ignore it in the fork() child process. Crashing instead. Set a breakpoint on objc_initializeAfterForkError to debug.

此错误是由于 MacOS High Sierra 及更高版本中增加了限制多进程和多线程的安全性而引起的。

我们已迁移至 GitHub Issues

Airflow 项目已从 JIRA 迁移到 GitHub 进行问题跟踪。

因此,如果您在 Airflow 1.10.10 中发现任何错误,请为其创建一个 GitHub Issue。

贡献者列表

根据 git shortlog,以下人员为 1.10.10 版本做出了贡献。感谢所有贡献者!

ANiteckiP, Alex Guziel, Alex Lue, Anita Fronczak, Ash Berlin-Taylor, Benji Visser, Bhavika Tekwani, Brad Dettmer, Chris McLennon, Cooper Gillan, Daniel Imberman, Daniel Standish, Felix Uellendall, Jarek Potiuk, Jiajie Zhong, Jithin Sukumar, Kamil Breguła, Kaxil Naik, Kengo Seki, Kris, Kumpan Anton, Lokesh Lal, Louis Guitton, Louis Simoneau, Luyao Yang, Noël Bardelot, Omair Khan, Philipp Großelfinger, Ping Zhang, RasPavel, Ray, Robin Edwards, Ry Walker, Saurabh, Sebastian Brandt, Tomek Kzukowski, Tomek Urbaszek, Van-Duyet Le, Xiaodong Deng, Xinbin Huang, Yu Qian, Zacharya, atrbgithub, cong-zhu, retornam

分享

另请阅读

Apache Airflow 1.10.12

Kaxil Naik

我们很高兴发布 Apache Airflow 1.10.12

Apache Airflow 1.10.8 和 1.10.9

Kaxil Naik

我们很高兴发布 Apache Airflow 的新版本 1.10.8 和 1.10.9。