1airflow
Airflow[1]是一个分布式任务调度框架,可以把具有上下级依赖关系的工作流组装成一个有向无环图[2]; 有向无环图长得就如下一般:图片
说的云里雾里的,那么Airflow究竟是什么呢?简单说,airflow就是一个平台,你可以在这个平台上创建、管理、执行自定义的工作流,这里的工作流就是前面所说的有向无环图,如上图所示一样,有向无环图是由一系列单独运行的task组合而成,任务之间的前后排列取决于任务之间处理的关系或者数据的流转的方向,而这里的工作流有一个很专业的名字叫DAG(Directed Acyclic Graph),我相信看到这里,你心中应该有些许概念了。
既然知道Airflow是什么了,那么它究竟能解决平常工作中的哪些问题呢?下面就需要聊聊具体的使用场景了:
Airflow解决的场景
- 帮助运维追溯服务器中运行的定时任务的执行的结果
- 大数据处理场景下,方便管理触发导入导出线上数据的各个任务以及这些任务之间的依赖关系
- 实现大规模主机集群中作业统一的调度和管理平台
- 等等其它场景...
现在你觉得Airflow是不是在工作中还真有点用,有没有一些共同的痛点呢?既然了解了airflow的作用,那就走进的airflow,熟悉一下airflow的组件架构。
Airflow架构
Airflow架构图
Worker
见名知意,它就是一线干活的,用来处理DAG中定义的具体任务
Scheduler
是airflow中一个管事的组件,用于周期性轮询任务的调度计划,然后将任务分发给执行的程序运行工作流
Webserver
webserver是Airflow中通过flask框架整合管理界面,可以让你通过http请求与airflow通信来管理airflow,可以通过界面的方式查看正在运行的任务,以及任务的运行状态、运行日志等等,
通过管理界面创建、触发、中止任务让airflow使用变得更加简单。如下图所示,当然这也是airflow的一个绝大优势。
Airflow Dashboard
Metadata Database
airflow的元数据数据库,供scheduler、worker和webserver用来存储状态。
从整体上看Airflow的组件架构不是很复杂,当然这里的我们也进行了一些其他任务编排工具,对比一下
2Airflow类似的编排工具比较
编排工具的受欢迎度
总体而言,Apache Airflow既是最受欢迎的工具,也是功能最广泛的工具。
Airflow vs Luigi
luigi与airflow都是使用python和dag定义任务和依赖项,但是luigi在架构和使用上相对更加的单一和简单,同时airflow因为拥有丰富的UI和计划任务方便显示更胜一筹,而luigi需要更多的自定义代码实现的计划任务的功能
Airflow vs Argo
airflow与argo都可以将任务定义为DAG,但是在Airflow中,您可以使用Python进行此操作,而在Argo中,要使用YAML
Airflow vs Kubeflow
Airflow是一个通用的任务编排平台,而Kubeflow特别专注于机器学习任务,两种工具都使用Python定义任务,但是Kubeflow在Kubernetes上运行任务。Kubeflow分为Kubeflow和Kubeflow管道:后一个组件允许您指定DAG,但与常规任务相比,它更侧重于部署和监控模型。
Airflow vs MLFlow
Airflow是一个通用的任务编排平台,而MLFlow是专门为优化机器学习项目而构建的。这意味着MLFlow具有运行和跟踪实验,以及训练和部署机器学习模型的功能,而Airflow适用于更广泛的用例,您可以使用它来运行任何类型的任务。
Airflow是一组管理和计划任务的模块的集合,MLFlow是一个纯粹的Python库,您可以将其导入到现有的机器学习代码中。
从了解Airflow的概念,到使用场景,已然对airflow这种编排工具有一定的了解,通过拆分了解airflow组件架构,又进一步对airflow的工作流程有一个初步的认识,通过与其他编排工具对比,了解的airflow的优势以及结合自身的使用场景,更加有助于判断,对编排工具选型的重要性。下一步,就将在实践中在深一步走进airflow。