升级检查脚本¶
获取 Airflow 升级检查包¶
Apache Airflow 在 PyPI 中以 apache-airflow
包的形式发布。升级检查脚本是单独 Python 包的一部分,因为它独立于 Apache Airflow 核心包,并且仅在一段时间内需要,具体来说仅用于从 Airflow 1.10 版本升级到 Airflow 2.0。
虽然已投入大量工作使此升级尽可能简单,但 Airflow 1.10 和 Airflow 2.0 之间存在一些兼容性更改。为了简化此过程,我们建议人们首先升级到 1.10 系列中的最新版本(在撰写本文时:1.10.15),然后下载此包并按以下详细说明运行脚本。
注意
目前仅官方支持 pip
安装。
虽然使用 poetry 或 pip-tools 等其他工具取得了一些成功,但它们与 pip
的工作流不同 - 尤其是在约束与需求管理方面。目前不支持通过 Poetry
或 pip-tools
安装。
使用 bazel
时存在已知问题,这可能会导致循环依赖。如果您遇到此类问题,请切换到 pip
。 Bazel
社区正在 此 PR 中修复此问题,因此较新版本的 bazel
可能会处理此问题。
如果您希望使用这些工具安装 airflow,则应使用约束文件并将它们转换为您的工具所需的适当格式和工作流。
pip install apache-airflow-upgrade-check
这将安装 Airflow 升级检查包的最新版本。
运行 Airflow 升级检查包¶
airflow upgrade_check
这将在屏幕上打印出在将 Airflow 版本升级到 2.0.0 或更高版本之前应采取的若干操作。
如果在运行命令时未发现问题,则该命令的退出代码为 0(成功),如果在运行检查时遇到问题,则退出代码为 1。
以下是升级检查成功运行后的示例输出。
============================================== STATUS ============================================
Check for latest versions of apache-airflow and checker..................................SUCCESS
Remove airflow.AirflowMacroPlugin class..................................................SUCCESS
Chain between DAG and operator not allowed...............................................SUCCESS
Connection.conn_id is not unique.........................................................SUCCESS
Connection.conn_type is not nullable.....................................................SUCCESS
Fernet is enabled by default.............................................................FAIL
GCP service account key deprecation......................................................SUCCESS
Changes in import paths of hooks, operators, sensors and others..........................FAIL
Users must delete deprecated configs for KubernetesExecutor..............................FAIL
Legacy UI is deprecated by default.......................................................SUCCESS
Logging configuration has been moved to new section......................................FAIL
Removal of Mesos Executor................................................................SUCCESS
Users must set a kubernetes.pod_template_file value......................................FAIL
SendGrid email uses old airflow.contrib module...........................................SUCCESS
Changes in import path of remote task handlers...........................................SUCCESS
Jinja Template Variables cannot be undefined.............................................FAIL
Found 7 problems.
========================================== RECOMMENDATIONS ========================================
Fernet is enabled by default
----------------------------
The fernet mechanism is enabled by default to increase the security of the default installation.
Problems:
1. fernet_key in airflow.cfg must be explicitly set empty as fernet mechanism is enabledby default. This means that the apache-airflow[crypto] extra-packages are always installed.However, this requires that your operating system has libffi-dev installed.
Changes in import paths of hooks, operators, sensors and others
---------------------------------------------------------------
Many hooks, operators and other classes has been renamed and moved. Those changes were part of unifying names and imports paths as described in AIP-21.
The contrib folder has been replaced by providers directory and packages:
https://github.com/apache/airflow#backport-packages
Problems:
1. Please install ``apache-airflow-backport-providers-presto``
2. Using ``airflow.hooks.presto_hook.PrestoHook`` will be replaced by ``airflow.providers.presto.hooks.presto.PrestoHook``. Affected file:
以下部分描述了正在执行的操作以及如何应用上面显示的建议。请注意,上面显示的结果仅为部分集合,其中仅在上述部分中显示了已识别的七个问题中的前两个。实际上,所有问题都显示在屏幕上。
了解正在检查的内容¶
升级检查检查 airflow.cfg 中的配置数据、Airflow 数据库中的元数据以及在当前 Airflow 环境中设置的 DAG。
以以上结果为例,已识别出两个具体问题。
第一个问题在配置文件 airflow.cfg 中被识别出来,其中 fernet_key 的当前配置选项不再可接受,需要更改。这是因为从 Airflow 2.0 开始,fernet_key 不能留空,而需要具有一个定义的值。检查有问题的 airflow.cfg 并搜索 fernet_key 条目将显示以下内容
fernet_key =
第二个问题在其中一个 DAG 中被识别出来。在这种情况下,需要更改 PrestoHook
的此导入语句,因为其在 Airflow 2.0 中的位置不同。检查 DAG 文件可能会显示以下内容
from airflow.hooks.presto_hook import PrestoHook
我们将在下一部分讨论如何修复这些问题并使其与 Airflow 2.0 兼容。
应用建议¶
在大多数情况下,升级检查的建议结果部分包含足够的信息来进行更改。
对于上面关于 fernet_key 识别的第一个问题,解决方案是在 Airflow 配置文件 airflow.cfg 中为 fernet_key 输入一个有效值。
对于第二个问题,您需要安装 Presto 反向移植提供程序。然后,您就可以使用包含挂钩更新版本的提供程序导入。
from airflow.providers.presto.hooks.presto import PrestoHook
关闭检查¶
高级 Airflow 用户或具有多个 Airflow 部署的用户可能希望通过关闭某些不适用的检查来根据其环境自定义升级检查。一个示例是 Airflow 部署不使用 KubernetesPodOperator
的用户可能希望关闭与 KubernetesPodOperator
相关的升级检查。
可以通过创建如下所示的 YAML 中的“升级配置文件”来完成此操作
ignored_rules:
- PodTemplateFileRule
要在运行升级检查脚本时使用此配置文件(在此示例中命名为 upgrade-configuration.yaml
),请使用以下命令语法
airflow upgrade_check --config=./upgrade-configuration.yaml
添加自定义检查¶
高级 Airflow 用户或具有多个 Airflow 部署的用户可能还希望为其环境中的特定元素(无论是 DAG 还是与配置相关的)添加其他升级检查。
这些其他检查应在 Python 类中定义,并按如下所示添加到“升级配置文件”中的 custom_rules
custom_rules:
- path.CustomCheckClass1
- path.CustomCheckClass2
现在,使用此配置文件(在此示例中,配置文件名为 upgrade-configuration.yaml
)调用升级检查脚本,如下所示
airflow upgrade_check --config=./upgrade-configuration.yaml