whirl:Apache Airflow的快速本地开发和测试工具

whirl:Apache Airflow的快速本地开发和测试工具

whirlFast iterative local development and testing of Apache Airflow workflows项目地址:https://gitcode.com/gh_mirrors/whi/whirl

whirl logo

whirl 是一个巧妙的解决方案,它使用Docker容器来启动Apache Airflow及其工作流程中所需的其他组件,为您提供了一个在本地机器上运行的生产环境副本。您可以从头到尾本地运行DAG,代码与生产环境相同。通过亲眼看到管道的成功执行,您将对自己的逻辑创建和重构以及它们如何与其他组件集成更有信心。对于新开发者来说,它还提供了一个独立的环境来尝试您的工作流程。

whirl 将您的DAG代码和(模拟)数据连接到其启动的Apache Airflow容器。利用卷挂载功能,您可以在最喜欢的IDE中对代码进行更改,并立即将其效果体现在运行中的Airflow UI上。这同样适用于您正在DAG中开发和使用的自定义Python模块。

请注意:whirl 并不是为了替代对由Apache Airflow编排的逻辑进行适当(单元)测试而设计的。

先决条件

whirl 基于DockerDocker Compose。确保已安装这些软件。如果使用的是 Docker for Mac 或 Windows,请确保配置了足够的RAM(建议8GB或更多),以支持所有容器的运行。

在CI管道中使用whirl时,需要安装jq。例如,使用Homebrew:

brew install jq

当前实现是在macOS上开发的,但旨在在Docker支持的任何平台上运行。我们发现在Linux和macOS上运行没有问题。在Windows 10的Hyper-V中运行Linux虚拟机可以获得更可靠的结果,因为原生的Windows 10 Docker依赖于性能有限的Windows文件共享(CIFS)来建立卷挂载。Airflow对卷的访问比CIFS能处理的要频繁,可能会导致偶尔出现FileNotFoundException错误。

Airflow 版本

截至2021年1月,whirl 使用Airflow 2.x.x作为默认版本。针对Airflow 1.10.x的特定标签可以在此处找到。

开始使用

开发阶段

克隆此存储库:

git clone https://github.com/godatadriven/whirl.git <目标目录>

为了方便起见,可以将存储库的基础目录添加到您的PATH环境变量中,使whirl命令可用:

export PATH=<目标目录>:${PATH}

使用发行版

下载最新的Whirl发布归档

解压缩文件(例如到/usr/local/opt

tar -xvzf whirl-release.tar.gz -C /usr/local/opt

确保whirl脚本在你的路径中可用:

export PATH=/usr/local/opt/whirl:$PATH

使用方法

whirl 脚本用于执行所有操作。

获取使用信息
$ whirl -h
$ whirl --help
启动whirl

默认操作是启动当前目录中的DAG。

使用命令行参数[-x example],可以从任何位置运行whirl并指定要运行的示例dag。example 参数指的是examples目录下的同名目录。

whirl 需要一个配置好的环境,可以通过命令行参数[-e environment]传递,也可以在.whirl.env文件中设置WHIRL_ENVIRONMENT环境变量。此环境变量对应envs目录中的同名目录。

$ whirl [-x example] [-e <environment>] [start]

指定start命令行参数是一种更明确的启动方式。

停止whirl
$ whirl  [-x example] [-e <environment>] stop

停止配置的环境。

如果您想停止特定环境的所有容器,可以通过添加命令行选项-e--environment来指定环境名称。该名称应与envs目录中的一个子目录相对应。

在CI管道中使用

我们在自己的CI(github actions)中运行大部分示例,有关实现细节,请参阅我们的github工作流

您可以在本地系统上使用whirl ci命令运行一个示例。这将:

  • 在后台运行Docker容器;
  • 确保DAG处于未暂停状态;并且
  • 等待管道成功或失败。

成功后,容器会停止并成功退出。在预期失败(或成功)的情况下,我们将打印失败任务的日志,然后清理并在指示管道失败之前退出。

配置环境变量

无需每次都使用环境选项,您还可以在一个.whirl.env文件中配置您的环境。可以有三个位置,按照以下顺序应用:

  • 位于此仓库根目录的.whirl.env文件。可以修改为指定要在启动whirl时使用的默认环境。通过设置WHIRL_ENVIRONMENT,它引用了envs目录中的一个目录。此仓库包含一个可修改的示例,默认设置了PYTHON_VERSION
  • 您的envs/{your-env}子目录中的.whirl.env文件。要使用的环境目录可以通过其他.whirl.env文件或命令行参数指定。这对于设置环境特定变量很有帮助。当然,在这里设置WHIRL_ENVIRONMENT并不太有意义。
  • DAG目录中的.whirl.env,用于覆盖任何环境变量。这可以用来重写(默认)WHIRL_ENVIRONMENT
内部环境变量

whirl脚本内部设置了以下环境变量:

| 环境变量 | 值 | 描述 | | --- | --- | --- | | DOCKER_CONTEXT_FOLDER | ${SCRIPT_DIR}/docker | Docker构建上下文的基本目录,用于Docker Compose引用 | | ENVIRONMENT_FOLDER | ${SCRIPT_DIR}/envs/<environment> | 所选环境的基本目录,包含docker-compose.yml和环境特定的准备脚本 | | DAG_FOLDER | $(pwd) | 当前工作目录。用作Airflow DAG目录。可能包含特定DAG的准备脚本 | | PROJECTNAME | $(basename ${DAG_FOLDER}) | |

结构

该项目基于docker-compose,采用不同的环境概念,其中Airflow是核心部分。其余环境取决于您情况下的生产环境所使用的工具/设置。

whirl脚本结合DAG和环境,形成一个完整的设置。

为了适应不同的示例:

  • 环境被分隔为envs/目录内的单独环境特定目录。
  • DAGS位于examples/目录的子目录中。
环境

环境使用Docker Compose启动容器,这些容器一起模仿您的生产环境。环境的基础是一个最小的docker-compose.yml文件,声明至少要运行一个Airflow容器。额外的工具(如s3sftp)可以在docker-compose文件中链接在一起,以形成您特定的环境。

每个环境还包含一些启动时需要的设置代码,例如ConnectionsVariables。每个环境都有一个whirl.setup.d/目录,该目录在Airflow容器内被挂载。启动时,这个目录中的所有脚本都会被执行。这是安装和配置使环境正常工作的额外客户端库的地方,例如,如果需要S3访问,则是awscli

DAGs

此项目中的DAG位于examples/目录中。在您的项目中,您的代码可以放在该仓库之外的某个位置。

每个示例目录至少包含一个示例DAG。此外,也可以在此处放置项目特定代码。与环境一样,DAG目录也可以包含一个whirl.setup.d/目录,它也被挂载在Airflow容器中。启动时,这两个目录中的脚本都会被执行。首先执行环境特定的whirl.setup.d/,然后是DAG的一个。

这也是安装和配置使DAG正常工作的额外客户端库的地方,例如,一个模拟API端点。

示例

此存储库包含一些示例环境和工作流。这些组件可以用作您自己环境的起点。如果您有一个好的示例想要添加,请提交合并请求!

每个示例都包含自己的README文件,解释该示例的特定之处。

运行示例

要运行示例:

$ cd ./examples/<example-dag-directory>
# 注意:在这里,我们通过命令行参数传递whirl环境。它也可以通过WHIRL_ENVIRONMENT变量配置
$ whirl -e <环境>

或者

$
# 注意:在这里,我们通过命令行参数传递whirl环境。它也可以通过WHIRL_ENVIRONMENT变量配置
$ whirl -x <示例> -e <环境>

打开浏览器访问http://localhost:5000,进入Airflow UI。手动启用DAG并观察管道运行的过程吧!

whirlFast iterative local development and testing of Apache Airflow workflows项目地址:https://gitcode.com/gh_mirrors/whi/whirl

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓬玮剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值