Airflow 1.10.12 包含自 1.10.11 以来的 113 次提交,新增 5 项功能,改进 23 项,修复 23 个 Bug,并有若干文档变更。
详情:
- PyPI: https://pypi.ac.cn/project/apache-airflow/1.10.12/
- Docs: https://airflow.org.cn/docs/1.10.12/
- Changelog: https://airflow.org.cn/docs/1.10.12/changelog.html
相较于 KubernetesExecutor 和 KubernetesPodOperator,Airflow 1.10.11 存在破坏性改动,建议用户直接升级到 Airflow 1.10.12。.
一些值得注意的新特性(面向用户)包括:
- 允许自定义 XCom 类
- 从 Secret Backend(如 Hashicorp Vault)获取包含敏感信息的 Airflow 配置
- 在 Airflow 本地设置中加入 AirflowClusterPolicyViolation 支持
允许自定义 XCom 类
在 Airflow 1.10.11 之前,XCom 数据仅存储在 Airflow 元数据库中。从 Airflow 1.10.12 起,用户可以定义自定义 XCom 类,这样就能在任务之间传递更大的数据。例如,当需要存储的 XCom 数据大小超过 XCom.MAX_XCOM_SIZE(48 KB)时,可以将其保存到 S3 或 GCS Bucket 中。
PR: https://github.com/apache/airflow/pull/8560
从 Secret Backend(如 Hashicorp Vault)获取包含敏感信息的 Airflow 配置
用户可以从像 Hashicorp Vault 这样的 Secrets Backend 中获取以下 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 的 Secret 管理方案。从 Airflow 1.10.12 起,用户无需在 airflow.cfg 中硬编码敏感配置值,也无需再使用环境变量来设置这些配置。
例如,元数据库连接字符串既可以在 airflow.cfg 中这样设置:
[core]
sql_alchemy_conn_secret = sql_alchemy_conn
这将从已配置的 Secrets Backend 中获取对应的配置项。
如你所见,只需在实际的配置项末尾添加 _secret 后缀,且其取值应为 Secrets Backend 将要查找的键。
同样,也可以通过相应的环境变量来设置 _secret 配置项。例如:
更多细节: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 文件启动 Pods
自 1.10.12 起,用户可以通过 YAML 文件启动 Pods,而无需逐项传递配置。
为了提供更大灵活性,我们已弃用 Airflow 自带的 Pod 类,改为使用官方 Kubernetes API 中的类和对象。Pod 类仍可使用,但会抛出弃用警告。此功能涉及对所有 pod 创建代码的大幅重构。
最初我们计划把这些功能留到 Airflow 2.0 才发布,但很快意识到在 1.10.x 中提前提供这些特性对用户迁移到 2.0 版本至关重要。
细节:https://github.com/apache/airflow/pull/6230(Backport commit)
升级指南
如果你正将 Apache Airflow 从旧版本升级到 1.10.12,请留意以下事项:
-
在执行
pip install -U apache-airflow==1.10.12后运行airflow upgradedb,因为1.10.12包含一次数据库迁移。 -
从 Airflow 1.10.12 起,在
pod_mutation_hook中使用airflow.contrib.kubernetes.Pod类已被弃用。建议改用kubernetes.client.models.V1Pod对象,这样用户在修改 Airflow Pod 时即可使用完整的 Kubernetes API。 -
此前,当通过 SkipMixin(如
BranchPythonOperator、BaseBranchOperator、ShortCircuitOperator)跳过的任务被清除后会重新执行。自 1.10.12 起,这类被跳过的任务在被清除后将再次被NotPreviouslySkippedDep跳过。
特别说明
Python 2
Python 2 已于 2020 年 1 月正式停止维护。Airflow 主分支已不再支持 Python 2,Airflow 1.10 系列将是最后一个支持 Python 2 的版本。
我们强烈建议用户使用 Python >= 3.6
使用 Airflow RBAC UI
Airflow 1.10.12 提供两套 UI,默认是基于非 RBAC 的 Flask‑admin UI,另一套是基于 Flask‑AppBuilder 的 UI。
基于 Flask‑AppBuilder(FAB)的 UI 支持基于角色的访问控制(RBAC),并且功能更丰富。可通过在 airflow.cfg 的 [webserver] 部分设置 rbac=True 来启用该 UI。
基于 Flask‑admin 的 UI 已被废弃,新的特性将不再移植到该 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
分享