龙空技术网

Apache Airflow:以编程方式编写、安排和监控工作流程的平台

运维开发木子李 922

前言:

而今我们对“win7apache删除”大致比较注意,各位老铁们都想要了解一些“win7apache删除”的相关内容。那么小编在网上汇集了一些关于“win7apache删除””的相关文章,希望各位老铁们能喜欢,小伙伴们一起来了解一下吧!

#挑战30天在头条写日记#

Apache Airflow(或简称 Airflow)是一个以编程方式编写、安排和监控工作流程的平台。

当工作流被定义为代码时,它们变得更加可维护、可版本化、可测试和协作。

使用 Airflow 将工作流程创作为任务的有向无环图 (DAG)。Airflow 调度程序在一组工作人员上执行您的任务,同时遵循指定的依赖关系。丰富的命令行实用程序使在 DAG 上执行复杂的操作变得轻而易举。丰富的用户界面可以轻松可视化生产中运行的管道、监控进度并在需要时解决问题。

项目重点

Airflow 最适合大多数静态且缓慢变化的工作流程。当一次运行与下一次运行的 DAG 结构相似时,它澄清了工作单元和连续性。其他类似的项目包括Luigi、Oozie和Azkaban。

Airflow 通常用于处理数据,但认为任务理想情况下应该是幂等的(即任务的结果将是相同的,并且不会在目标系统中创建重复的数据),并且不应传递大量数据从一个任务到下一个任务(尽管任务可以使用 Airflow 的XCom 功能传递元数据)。对于大批量、数据密集型任务,最佳实践是委托给专门从事该类型工作的外部服务。

Airflow 不是流式解决方案,但它通常用于处理实时数据,批量从流中提取数据。

原则动态:气流管道是配置为代码 (Python),允许动态管道生成。这允许编写动态实例化管道的代码。可扩展:轻松定义您自己的运算符、执行器并扩展库,使其符合适合您环境的抽象级别。优雅:气流管道简洁、明确。使用强大的Jinja模板引擎将脚本参数化内置于 Airflow 的核心中。可扩展:Airflow 具有模块化架构,并使用消息队列来编排任意数量的工作人员。要求

Apache Airflow 经过以下测试:

主要版本(开发)

稳定版本(2.7.0)

Python

3.8、3.9、3.10、3.11

3.8、3.9、3.10、3.11

平台

AMD64/ARM64(*)

AMD64/ARM64(*)

库伯内斯

1.24、1.25、1.26、1.27、1.28

1.24、1.25、1.26、1.27

PostgreSQL

11, 12, 13, 14, 15

11, 12, 13, 14, 15

MySQL

5.7、8.0、8.1

5.7、8.0

SQLite

3.15.0+

3.15.0+

SQL数据库

2017年(*), 2019年(*)

2017年(*), 2019年(*)

* 实验性的

注意:MySQL 5.x 版本无法运行多个调度程序,或者存在运行多个调度程序的限制 - 请参阅调度程序文档。MariaDB 未经测试/推荐。

注意:Airflow 测试中使用 SQLite。不要在生产中使用它。我们建议使用最新稳定版本的 SQLite 进行本地开发。

注意:Airflow 目前可以在符合 POSIX 标准的操作系统上运行。为了进行开发,它会定期在相当现代的 Linux 发行版和最新版本的 macOS 上进行测试。在 Windows 上,您可以通过 WSL2(适用于 Linux 2 的 Windows 子系统)或 Linux 容器运行它。添加 Windows 支持的工作通过#10388进行跟踪,但这并不是一个高优先级。您应该仅使用基于 Linux 的发行版作为“生产”执行环境,因为这是唯一受支持的环境。我们的 CI 测试中使用的以及社区管理的 DockerHub 映像中使用的唯一发行版是 Debian Bullseye.

从 PyPI 安装

我们将 Apache Airflow 作为apache-airflow包发布在 PyPI 中。然而,安装它有时可能会很棘手,因为 Airflow 既是一个库,又是一个应用程序。库通常保持它们的依赖关系开放,应用程序通常固定它们,但我们应该两者都不做,或者同时做。我们决定尽可能保持依赖项的开放性(在setup.py),以便用户可以根据需要安装不同版本的库。这意味着pip install apache-airflow有时会无法工作或会产生无法使用的 Airflow 安装。

constraints-main然而,为了实现可重复安装,我们在孤立分支和分支中保留了一组“已知有效”的约束文件constraints-2-0。我们为每个主要/次要 Python 版本单独保留那些“已知有效”的约束文件。从 PyPI 安装 Airflow 时,您可以将它们用作约束文件。请注意,您必须在 URL 中指定正确的 Airflow 标记/版本/分支和 Python 版本。

仅安装 Airflow

注意:pip目前官方仅支持安装。

虽然可以使用Poetry或 pip-tools 等工具安装 Airflow ,但它们不共享相同的工作流程 pip- 特别是在约束与需求管理方面。目前不支持通过Poetry或安装。pip-tools

bazel使用它安装 Airflow 时存在一些已知问题,可能会导致循环依赖。pip如果遇到此类问题请转用。Bazel社区致力于解决this PR <;_ 中的问题,因此较新版本的 _ 可能bazel会处理该问题。

如果您希望使用这些工具安装 Airflow,则应使用约束文件并将其转换为您的工具所需的适当格式和工作流程。

pip install 'apache-airflow==2.7.0' \ --constraint ";
使用附加程序安装(即 postgres、google)
pip install 'apache-airflow[postgres,google]==2.7.0' \ --constraint ";
其他方式安装

还有其他安装和使用 Airflow 的方法。这些是“方便”的方法 - 它们不是 所声明的“官方版本” ASF Release Policy,但不想自己构建软件的用户可以使用它们。

这些是 - 按照人们安装 Airflow 的最常见方式的顺序排列:

PyPI 发布以使用标准pip工具安装 AirflowDocker 镜像通过工具安装气流 docker,在 Kubernetes、Helm Charts、、docker-compose等中使用它们。您可以在最新文档docker swarm中阅读有关使用、自定义和扩展镜像的更多信息 ,并在IMAGES.rst文档中了解有关内部结构的详细信息。GitHub 中的标签,用于检索用于通过 git 生成官方源码包的 git 项目源

所有这些工件都不是官方发布的,但它们是使用官方发布的源代码准备的。其中一些工件是“开发”或“预发布”工件,并且它们按照 ASF 政策明确标记为此类。

用户界面DAG:环境中所有 DAG 的概述。网格:跨越时间的 DAG 的网格表示。

图表:DAG 的依赖关系及其特定运行的当前状态的可视化。任务持续时间:一段时间内花在不同任务上的总时间。甘特图:DAG 的持续时间和重叠。代码:查看 DAG 源代码的快速方法。语义版本控制

从 Airflow 2.0.0 开始,我们对所有发布的软件包都支持严格的SemVer方法。

我们同意的一些具体规则定义了不同包的版本控制细节:

Airflow:SemVer 规则仅适用于核心气流(不包括对提供商的任何更改)。更改 Airflow 依赖项版本的限制本身并不是重大更改。Airflow 提供商:SemVer 规则仅适用于特定提供商代码的更改。SemVer 软件包的主要版本和次要版本独立于 Airflow 版本。例如,google 4.1.0提供amazon 3.0.3者可以愉快地安装Airflow 2.1.2. 如果提供程序和 Airflow 包之间存在交叉依赖性限制,则它们在提供程序中存在为install_requires限制。我们的目标是保持提供程序与所有先前发布的 Airflow 2 版本的向后兼容性,但有时会出现重大更改,可能会使某些或所有提供程序指定最低 Airflow 版本。更改最低支持的 Airflow 版本对于提供程序来说是一项重大更改,因为安装新的提供程序可能会自动升级 Airflow(这可能是升级提供程序的不良副作用)。Airflow Helm Chart:SemVer 规则仅适用于图表中的更改。图表的 SemVer MAJOR 和 MINOR 版本独立于 Airflow 版本。我们的目标是保持 Helm Chart 与所有已发布的 Airflow 2 版本的向后兼容性,但某些新功能可能只能从特定的 Airflow 版本开始工作。然而,我们可能会限制 Helm Chart 依赖于最小的 Airflow 版本。Airflow API 客户端:SemVer MAJOR 和 MINOR 版本遵循 Airflow 的 MAJOR 和 MINOR 版本。Airflow 的第一个主要或次要 XY0 版本应始终跟随所有客户端的 XY0 版本。仅当此 PATCH 与客户端相关时,气流 PATCH XYZ 版本之后才可以发布 API 客户端的 PATCH 版本。然后,客户可以发布自己的带有错误修复的 PATCH 版本,独立于 Airflow PATCH 版本。因此,每个 API 客户端都将拥有自己的 PATCH 版本,该版本可能与 Airflow PATCH 版本同步,也可能不同步。对于特定的主要/次要 Airflow 版本,用户应该选择客户端的最新 PATCH 版本,而与其 Airflow PATCH 版本无关。支持 Python 和 Kubernetes 版本

从 Airflow 2.0 开始,我们同意遵循 Python 和 Kubernetes 支持的某些规则。它们基于 Python 和 Kubernetes 的官方发布时间表,在 Python 开发人员指南和 Kubernetes 版本倾斜政策中得到了很好的总结。

当 Python 和 Kubernetes 版本达到 EOL 时,我们将不再支持它们。除 Kubernetes 外,如果两个主要云提供商仍然提供支持,则 Airflow 仍会支持该版本。在 EOL 日期之后,我们在 main 中放弃了对这些 EOL 版本的支持,并且当我们发布 Airflow 的第一个新的 MINOR(如果没有新的 MINOR 版本,则为 MAJOR)时,它会被有效删除。例如,对于 Python 3.8,这意味着我们将在 2023 年 6 月 27 日之后放弃对 main 的支持,之后发布的 Airflow 的第一个 MAJOR 或 MINOR 版本将不再支持它。在正式发布后,我们在 main 中支持新版本的 Python/Kubernetes,一旦我们让它们在我们的 CI 管道中工作(这可能不会立即生效,因为依赖项主要赶上新版本的 Python),我们就会发布新镜像Airflow 中的 /support 基于工作 CI 设置。此政策是尽力而为,这意味着在某些情况下,如果情况需要,我们可能会提前终止支持。基本操作系统对参考 Airflow 图像的支持

Airflow 社区提供方便的打包容器映像,每当我们发布 Apache Airflow 版本时都会发布这些映像。这些图像包含:

带有安装 Airflow 所需软件包的基础操作系统(稳定的 Debian 操作系统)Airflow 次要版本发布时支持的基本 Python 安装版本(因此,例如 2.3 和 2.2 行可能有不同的版本)连接到支持的数据库所需的库(同样,支持的数据库集取决于 Airflow 的 MINOR 版本)预定义的一组流行提供程序(有关详细信息,请参阅 Dockerfile )。可以构建您自己的自定义映像,用户可以选择自己的一组提供程序和库(请参阅构建映像)未来 Airflow 可能还支持“精简”版本,无需安装提供程序或数据库客户端

基础操作系统映像的版本是 Debian 的稳定版本。Airflow 支持使用所有当前活动的稳定版本 - 只要所有 Airflow 依赖项都支持构建,并且我们设置了用于构建和测试操作系统版本的 CI 管道。在之前稳定版本的操作系统生命周期结束前大约 6 个月,Airflow 将发布的映像切换为使用最新支持的操作系统版本。例如,由于Debian Buster生命周期结束时间为 2022 年 8 月,Airflow 将main分支中的镜像切换为 2022 年 2 月/3 月使用。Debian Bullseye切换发生后,该版本将在下一个 MINOR 版本中使用。如果是 Bullseye 开关 - 使用 2.3.0 版本Debian Bullseye。先前 MINOR 版本中发布的映像继续使用该 MINOR 版本的所有其他版本所使用的版本。

对图像的支持Debian Buster已于 2022 年 8 月完全放弃,预计每个人都将停止使用Debian Buster.

用户将继续能够使用稳定的 Debian 版本构建他们的镜像,直到生命周期结束,并且镜像的构建和验证发生在我们的 CI 中,但在分支中没有使用该镜像执行单元测试main。

Airflow 依赖关系的处理方法

Airflow 有很多依赖项 - 直接依赖项和传递依赖项,而且 Airflow 既是库又是应用程序,因此我们对依赖项的策略必须包括 - 应用程序安装的稳定性,以及为开发的用户安装更新版本的依赖项的能力DAG。constraints我们开发了用于确保气流可以以可重复的方式安装的方法,同时我们不限制用户升级大多数依赖项。因此,我们决定默认不设置 Airflow 依赖项的上限版本,除非我们有充分的理由相信需要对它们进行上限,因为依赖项的重要性以及升级特定依赖项涉及的风险。我们还限制了已知会导致问题的依赖关系。

我们的约束机制负责自动查找和升级所有非上限依赖项(前提是所有测试都通过)。我们的main构建失败将表明是否存在破坏我们测试的依赖项版本 - 表明我们应该对它们进行上限绑定,或者我们应该修复我们的代码/测试以考虑这些依赖项的上游更改。

每当我们对这样的依赖关系进行上限时,我们应该总是注释为什么我们这样做——即我们应该有一个很好的理由为什么依赖关系是上限。另外我们还应该提到解除绑定的条件是什么。

Airflow Core 依赖关系的方法

这些extras和providers依赖项都保存在setup.cfg.

我们认为很少有依赖项足够重要,可以在默认情况下对它们进行上限限制,因为众所周知,它们遵循可预测的版本控制方案,并且我们知道这些依赖项的新版本很可能会带来重大更改。我们承诺定期审查并尝试升级到发布的较新版本的依赖项,但这是手动过程。

重要的依赖项是:

SQLAlchemy:特定次要版本的上限(众所周知,SQLAlchemy 会删除弃用内容并引入重大更改,特别是对不同数据库的支持各不相同且以不同的速度进行更改(例如:SQLAlchemy 1.4 破坏了 Airflow 的 MSSQL 集成)Alembic:以可预测且高性能的方式处理迁移非常重要。它是与 SQLAlchemy 一起开发的。我们对 Alembic 的经验是它在 MINOR 版本中非常稳定Flask:我们使用 Flask 作为 Web UI 和 API 的骨干。我们知道 Flask 的主要版本很可能会在这些版本之间引入重大更改,因此将其限制为主要版本是有意义的werkzeug:已知该库会在新版本中引起问题。它与 Flask 库紧密耦合,我们应该一起更新它们celery:Celery 是 Airflow 的重要组成部分,因为它用于 CeleryExecutor (和类似的)。Celery 遵循 SemVer,因此我们应该将其上限限制为下一个 MAJOR 版本。另外,当我们升级库的较高版本时,我们应该确保 Celery Provider 最低 Airflow 版本已更新。kubernetes:Kubernetes 是 Airflow 的重要组成部分,因为它用于 KubernetesExecutor(和类似的)。Kubernetes Python 库遵循 SemVer,因此我们应该将其上限限制为下一个主要版本。此外,当我们升级库的更高版本时,我们应该确保 Kubernetes Provider 最低 Airflow 版本已更新。Airflow Providers 和 extras 中依赖关系的方法

Airflow 的主要部分是 Airflow Core,但 Airflow 的强大功能还来自许多扩展核心功能并单独发布的提供商,即使我们(目前)为了方便起见将它们保留在同一个 monorepo 中。您可以在提供程序文档中阅读有关提供程序的更多信息 。我们还实施了一套用于维护和发布社区管理的提供商的政策,以及提供商文档中社区与第三方提供商的方法。

这些extras和providers依赖项都在每个提供者中维护provider.yaml。

项目地址:

标签: #win7apache删除 #镜像编辑工具apache20汉化版 #mac如何共享apache