阅读时间: 4 分钟
自动化任务在今天的工业中发挥着重要作用。自动化可以帮助我们非常迅速和高效地实现我们的目标。然而,在今天这个时代,人们仍然无法获得自动化的好处。例如,在我们的日常生活中,我们要处理重复的工作流程,如获取数据、处理、上传和报告。如果这个过程在一个特定的时间自动触发,所有的任务都能按顺序执行,那不是很好吗?Apache Airflow就是这样一个对你很有帮助的工具。无论你是数据科学家、数据工程师还是软件工程师,你肯定会发现这个工具很有用。
什么是Apache Airflow?
它是一个以编程方式编写、安排和监控工作流的平台。它是最强大的ETL(提取、转换、加载)工作流管理工具之一,被数据工程师用于协调工作流或管道。使用Airflow,你可以可视化你的数据管道的依赖关系,日志,代码,触发任务,进度状态。Apache Airflow的开发始于2014年的Airbnb,是一个开源项目。它目前是Apache软件基金会项目的一部分,可在GitHub上供社区使用。它被200多家公司使用,其中一些是Airbnb、雅虎、贝宝、英特尔等。欢迎加入社区,作为一个开发者,报告或修复一个错误,增加新的功能,或改进文档。
下面的图片显示了一个使用Apache Airflow的架构实例。


安装。
请遵循这里提供的官方快速入门指南。
使用Airflow的优势
与老旧的调度方案(如cron作业)相比,Airflow具有巨大的优势。
- 处理工作之间的复杂关系。
- 任何使用过cron的人都会同意,处理任务之间的关系和管理它们是一场噩梦,而使用Airflow,我们可以很容易地看到关系,并从容易理解的DAG(有向无环图)中管理任务。
- 通过一个定义良好的用户界面集中处理所有工作。
- 在这里,你可以列出并管理你的环境中存在的所有DAG。相反,cron需要外部支持来记录、跟踪和管理任务。
- 错误报告和警报。
- 安全性(保护数据库的凭证)。
- 可扩展性(通过使用Celery添加多个工作节点)。
- 强大的集成。它支持与谷歌云平台、亚马逊AWS、微软Azure等进行随时随地的集成。
- 插件。Airflow内置了一个简单的插件管理器,只需将文件放到
$AIRFLOW_HOME/plugins文件夹中,就可以将外部功能集成到其核心中。
Airflow的关键组件
调度器
Airflow的调度器监控所有的任务和DAG,一旦它们的依赖关系完成,就会触发任务实例。调度器启动了一个子进程,该进程监控并与指定DAG目录中的所有DAG保持同步。默认情况下,调度器每分钟收集一次DAG解析结果,并检查是否有活动任务可以被触发。Airflow调度器被设计为在Airflow生产环境中作为一个持久性服务运行。要运行调度器,你需要执行airflow scheduler 命令。它使用airflow.cfg 中指定的配置并相应地运行调度器。
调度器使用配置的Executor来运行准备好的任务。一旦调度器运行成功,你的DAG将开始执行。
执行者
执行者是负责运行任务的人。它们有一个共同的API,你可以根据你的安装需要来交换执行者。Airflow在同一时间只能配置一个执行器。这可以通过配置文件中的[core] 部分的执行器选项来设置。例如,如果你使用的是一个内置的执行器,只要提到执行器的名称就可以了,比如。
[core]
executor = KubernetesExecutor
有两种类型的内置执行器。
-
**本地执行器。**这些执行器在本地运行任务,即在调度器进程中运行。Airflow有三个这样的本地执行器。
- Debug Executor。DebugExecutor是作为一个调试工具,可以从IDE中使用。它是一个单进程执行器,排队等待TaskInstance并通过运行
_run_raw_task方法来执行它们。 - 本地执行器。LocalExecutor通过在不同模式下以受控方式生成进程来运行任务。
- 顺序执行器。当你第一次安装
airflow,SequentialExecutor是默认的执行器。这个执行器一次只运行一个任务实例。
- Debug Executor。DebugExecutor是作为一个调试工具,可以从IDE中使用。它是一个单进程执行器,排队等待TaskInstance并通过运行
-
远程执行器:这些执行器使用一个工人池远程运行他们的任务。Airflow有四个这样的远程执行器。
-
Celery执行器:
U唱出这个执行器,你可以扩展工作者的数量。 -
Dask执行器。这个执行器允许你在Dask分布式集群中运行Airflow任务。Dask集群可以运行在一台机器上或远程网络上。
-
Kubernetes执行器。Kubernetes执行器在Kubernetes集群上的自己的pod中运行每个任务实例。
-
CeleryKubernetes Executor:CeleryKubernetes Executor允许用户同时运行一个Celery Executor和一个Kubernetes Executor。根据任务的队列,选择一个执行器来运行任务。
-
你也可以编写你自己的自定义执行器,并通过其完整的路径来引用它们。
[core]
executor = knoldus.executors.CustomExecutor
网络服务器(Airflow的网络用户界面)
Airflow有一个用户界面,可以让你看到DAG和它们的任务正在做什么,触发DAG的运行,查看日志,并对DAG的问题进行有限的调试和解决。Airflow用户界面有三个不同的视图。DAGs视图、树形视图和图形视图。

元数据数据库
Airflow支持各种数据库的元数据存储。该数据库存储配置,如变量和连接、用户信息、角色和策略。调度器从这个数据库中收集所有关于DAG的元数据、调度间隔、每次运行的统计数据和任务。
Airflow使用Python中的SQLAlchemy和对象关系映射(ORM),从应用层连接并与底层元数据数据库进行交互。
总结
我们将在接下来的博客中探讨更多关于Airflow的话题,如编写DAG和扩展Airflow。