自 1.10.11 版本以来,Airflow 1.10.12 包含 113 次提交,其中包括 5 个新功能、23 项改进、23 个错误修复以及多项文档变更。

详细信息:

Airflow 1.10.11 在 KubernetesExecutor 和 KubernetesPodOperator 方面存在重大变更,因此建议用户直接升级到 Airflow 1.10.12。.

一些值得关注的新功能(面向用户)包括:

允许定义自定义 XCom 类

在 Airflow 1.10.11 之前,XCom 数据仅存储在 Airflow 元数据库中。从 Airflow 1.10.12 开始,用户可以定义自定义 XCom 类。这将允许用户在任务之间传输更大的数据。例如,如果需要存储的数据大小大于 XCom.MAX_XCOM_SIZE (48 KB),则可以将 XCom 存储在 S3 或 GCS 存储桶中。

PR: https://github.com/apache/airflow/pull/8560

从秘密后端获取包含敏感数据的 Airflow 配置

用户将能够从 Hashicorp Vault 等秘密后端获取以下 Airflow 配置:

  • sql_alchemy_conn 在 [core] 部分
  • fernet_key 在 [core] 部分
  • broker_url 在 [celery] 部分
  • flower_basic_auth 在 [celery] 部分
  • result_backend 在 [celery] 部分
  • password 在 [atlas] 部分
  • smtp_password 在 [smtp] 部分
  • bind_password 在 [ldap] 部分
  • git_password 在 [kubernetes] 部分

为进一步改进 Airflow 的秘密管理功能,从 Airflow 1.10.12 开始,用户无需将**敏感**配置值硬编码到 airflow.cfg 中,也不需要使用环境变量来设置此配置。

例如,元数据数据库连接字符串可以在 airflow.cfg 中这样设置:

[core]
sql_alchemy_conn_secret = sql_alchemy_conn

这将从配置的秘密后端检索配置选项。

如您所见,您只需要在实际配置选项的末尾添加 _secret 后缀,并且其值必须是秘密后端将查找的**键**。

类似地,也可以使用相应的环境变量来设置 _secret 配置选项。例如:

export AIRFLOW__CORE__SQL_ALCHEMY_CONN_SECRET=sql_alchemy_conn

更多详细信息: https://airflow.org.cn/docs/1.10.12/howto/set-config.html

为 airflow_local_settings.py 添加 AirflowClusterPolicyViolation 支持

用户可以使用集群策略对 Airflow 任务应用集群范围的检查。您可以在策略或任务变异钩子中抛出 AirflowClusterPolicyViolation,以防止导入 DAG 或防止不符合检查的任务被执行。

这些检查旨在帮助使用 Airflow 的团队防范可能通过代码审查的常见新手错误,而不是作为技术安全控制。

例如,不要运行没有 airflow 所有者的任务

def task_must_have_owners(task):
    if not task.owner or task.owner.lower() == conf.get('operators', 'default_owner'):
        raise AirflowClusterPolicyViolation(
            'Task must have non-None non-default owner. Current value: {}'.format(task.owner))

更多详细信息: https://airflow.org.cn/docs/1.10.12/concepts.html#cluster-policies-for-custom-task-checks

在使用 KubernetesExecutor 和 KubernetesPodOperator 时通过 YAML 文件启动 Pod

从 1.10.12 版本开始,用户可以通过 YAML 文件启动 Pod,而不是传递各种配置。

为了提供更大的灵活性,我们已弃用 Airflow 的 Pod 类,现在转而使用官方 Kubernetes API 中的类和对象。POD 类仍然可用,但会发出弃用警告。此功能涉及对我们所有 Pod 创建代码进行了相当广泛的重写。

最初,我们打算将这些功能推迟到 Airflow 2.0。然而,我们很快意识到在 1.10.x 版本中公开这些功能对于用户为即将到来的 2.0 版本做好准备至关重要。

详细信息: https://github.com/apache/airflow/pull/6230 (回迁提交)

更新指南

如果您正在将 Apache Airflow 从以前的版本更新到 1.10.12,请注意以下事项:

  • 在运行 pip install -U apache-airflow==1.10.12 后,请运行 airflow upgradedb,因为 1.10.12 包含 1 个数据库迁移。

  • 自 airflow 1.10.12 起,在 pod_mutation_hook 中使用 airflow.contrib.kubernetes.Pod 类已被弃用。我们建议用户将 pod 参数视为一个 kubernetes.client.models.V1Pod 对象。这意味着用户现在在修改 Airflow Pod 进行 POD 变异时,可以访问完整的 Kubernetes API。

  • 此前,当被 SkipMixin(例如 BranchPythonOperatorBaseBranchOperatorShortCircuitOperator)跳过的任务被清除时,它们会执行。自 1.10.12 起,当此类跳过的任务被清除时,它们将通过新引入的 NotPreviouslySkippedDep 再次被跳过。

特别注意事项

Python 2

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

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

使用 Airflow RBAC UI

Airflow 1.10.12 附带 2 个 UI,默认是基于 Flask-admin 的非 RBAC UI 和基于 Flask-appbuilder 的 UI。

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

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

我们已迁移到 GitHub Issues

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

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

贡献者列表

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

Alexander Sutcliffe, Andy, Aneesh Joseph, Ash Berlin-Taylor, Aviral Agrawal, BaoshanGu, Beni Ben zikry, Daniel Imberman, Daniel Standish, Danylo Baibak, Ephraim Anierobi, Felix Uellendall, Greg Neiheisel, Hartorn, Jacob Ferriero, Jannik F, Jarek Potiuk, Jinhui Zhang, Kamil Breguła, Kaxil Naik, Kurganov, Luis Magana, Max Arrich, Pete DeJoy, Sumit Maheshwari, Tomek Urbaszek, Vicken Simonian, Vinnie Guimaraes, William Tran, Xiaodong Deng, YI FU, Zikun Zhu, dewaldabrie, pulsar314, retornam, yuqian90

分享

另请阅读

Apache Airflow 1.10.10

Kaxil Naik

我们很高兴发布 Apache Airflow 1.10.10 版本

Apache Airflow 1.10.8 和 1.10.9

Kaxil Naik

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