升级检查脚本

获取 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 安装。

虽然使用诸如 poetrypip-tools 等其他工具取得了一些成功,但它们与 pip 没有相同的工作流程 - 特别是在约束与需求管理方面。目前不支持通过 Poetrypip-tools 进行安装。

bazel 存在已知问题,当使用它安装 Airflow 时,可能会导致循环依赖。如果遇到此类问题,请切换到 pipBazel 社区正在努力在 此 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 Backport 提供程序。然后,您可以使用包含更新的钩子版本的提供程序导入。

from airflow.providers.presto.hooks.presto import PrestoHook

关闭检查

高级 Airflow 用户或具有多个 Airflow 部署的用户可能希望通过关闭某些不适用于他们的检查来定制其环境的升级检查。一个例子是未使用 KubernetesPodOperator 的 Airflow 部署的用户可能希望关闭与 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

此条目是否有帮助?