Airbnb的Airflow与Spotify的Luigi

  从A点到B点获取数据

  

Airbnb的Airflow与Spotify的Luigi

  > Photo by tian kuan on Unsplash

  我们最近写了有关ETL及其重要性的文章。 我们想概述一下什么是ETL工具。 您可以将这些ETL工具称为工作流工具,以帮助管理从A点到B点的数据移动。

  这些流行的工作流程工具中有两个是Spotify的Luigi和Airbnb的Airflow。 这两个工作流引擎均已开发,可帮助设计和执行用于数据分析的计算量大的工作流。

  什么是DAG?

  现在,在比较Airflow和Luigi之前,重要的是我们了解两个库共有的重要概念。 两者本质上都建立了所谓的有向无环图(DAG)。 DAG是任务的集合,这些任务以特定顺序运行,并且依赖于先前的任务。

  例如,如果我们有三个名为Foo,Bar和FooBar的任务,则可能是Foo首先运行,而Bar和FooBar取决于Foo整理。

  这将创建一个基本图,如下图所示。 如您所见,这里有一条清晰的路。 现在,想象一下有成百上千的任务。

  

Airbnb的Airflow与Spotify的Luigi

  大型数据组织具有依赖于依赖项的大量DAG。 拥有对DAG的清晰访问权限,使公司可以跟踪出现问题的地方,并且不允许不良数据进入其数据生态系统,因为如果发生故障,它通常会迫使下游任务等待其依赖关系完成。

  这是Airflow和Luigi等工具派上用场的地方。

  什么Airflow?

Airbnb的Airflow与Spotify的Luigi

  > source

  此工作流计划程序在Python中支持任务定义和依赖项。

  它由Airbnb于2014年编写,旨在在多个工作节点上执行,计划和分发任务。 Airflow于2021年开源,不仅支持日历计划,还配备了一个不错的Web仪表板,可让用户查看当前和过去的任务状态。

  设计用于存储和保留其状态,此工作流引擎支持关系数据库。 由于其Web仪表板可视化功能,Airflow也可以用作传统ETL的起点。

  Airflow在其母公司Airbnb推动下的一些流程包括:数据仓库,实验,增长分析和电子邮件定位。

  什么是luigu?

Airbnb的Airflow与Spotify的Luigi

  Luigi是一个执行框架,允许您使用Python编写数据管道。

  该工作流引擎支持任务依赖性,并包括一个中央调度程序,该调度程序提供了详细的库,以帮助助手在MySQL,AWS和Hadoop中构建数据管道。 不仅游戏账号转让平台很容易依赖其存储库中定义的任务,而且对代码重用也非常方便; 您可以轻松派生执行路径,并将一个任务的输出用作第二个任务的输入。

  该框架由Spotify编写,并于2012年成为开源。Stripe,Foursquare和Asana等许多受欢迎的公司都使用Luigi工作流引擎。

  两种开源工作流引擎之间的比较

Airbnb的Airflow与Spotify的Luigi

  这两个WMS都很棒。 但是每个人都有其优点和缺点。 本节将为您简要比较Airflow和Luigi。

  Luigi和Airflow的共同点

  在介绍这两种工具的优缺点之前,我们先讨论一下两者的共同点:

  ●可视化工具

  ●任务代表一个工作单元

  ●数据结构标准

  ●一个有向图的节点

  ●用于指定同步/异步任务,条件路径和并行命令的选项

  更重要的是,这两个工作流程引擎均使用Python编码。 这使得在大多数公司中很容易实现这些库,因为Python非常普遍。

  Luigi的利与弊

  优点:

  ●自定义日历计划:尽管大多数ETL系统都有需要每小时运行的任务,但Luigi没有日历计划的概念。 因此,取决于用户是否方便地运行任务。 中央调度程序包含任务历史记录功能,该功能还将任务完成情况记录到关系数据库中,该关系数据库又将其公开到主仪表板上。

  ●令人印象深刻的库存库:Luigi最好的部分之一是其库存任务和目标数据系统的库-基于SQL和NOSQL。 每个库都包含作为辅助方法引入的许多功能。 这些帮助器类支持Hadoop,Hive查询,扩展,Redshift,PostgreSQL,Google BigQuery等。

  ●以文件和数据集为目标:Luigi将文件和数据集直接作为任务的输入或输出为目标,这使得更容易还原ETL系统的历史状态-即使状态数据库丢失。

  缺点:

  ●任务创建和测试:在创建和测试任务时,Luigi API非常困难。 在创建过程中,任务状态与任务实际要产生的数据紧密相关。 因此,工程师倾向于将任务推向生产阶段,因为这很违反直觉。

  ●扩展性不是很强:由于Luigi和Cron紧密耦合,因此Luigi中的工作进程数受分配给该作业的Cron工作程序数的限制。 更糟糕的是,工人只能运行中央调度程序上载的任务。 因此,如果您希望并行处理大型管道中的任务,则必须将其拆分为不同的子管道。

  ●难以使用:如果您需要查看任务日志和失败,没有简便的出路。 每一次,您都必须查看cron worker的日志,然后找到任务日志-这本身非常耗费任务。 此外,在执行之前无法查看任务的DAG。 因此,您将不知道在部署期间关联任务中正在运行什么代码。

  Airflow的优缺点

Airbnb的Airflow与Spotify的Luigi

  优点:

  · 易于使用的用户界面:使用Airflow,您可以轻松查看任务日志,层次结构,状态和代码运行。 该用户界面还使您可以轻松更改任务状态,重新运行历史任务以及强制执行任务。

  · 独立的调度程序:Airflow带有自己的调度程序,可让您将任务与任务分离,并轻松地独立扩展它们。 此外,Airflow同时支持多个DAG。 这些DAG的任务分为两类:传感器和操作员。

  · 活跃的开源社区:凭借强大的社区,Airflow积极获得诸如寻呼机职责,Slack集成和SLA之类的功能。 聊天室本身非常活跃,因此新手可以在几个小时内回答他们的问题。

  缺点:

  · 任务优化:对于任何中型公司,管道中都有多个任务,Airflow有时不清楚如何将这些任务组织到大型管道中。

  · 没有直接处理任务:除特殊的传感器操作员外,Airflow不会直接将数据集或文件作为任务输入处理。 在Airflow中,状态数据库仅存储任务状态并记录数据集,因此,如果数据库丢失,则很难恢复ETL的历史状态。 而且,这使得处理似乎正确但不产生和输出的任务变得更加困难。

  · 灵活性较低:借助Airflow,工作人员无法按照自定义计划独立地启动任务或灵活地选择任务。 由于只能由中央调度程序选择任务,因此Airflow会开始使用中央调度程序进行工作。

  哪种工作流程引擎更好?

  如果您问我,我会推荐Airflow over Luigi。 为什么? 使用Airflow不仅更容易测试管道,而且还具有独立的任务状态。

  在调度方面,Luigi在cron作业中运行任务,而Airflow拥有自己的LocalScheduler,它允许用户独立缩放任务。 此外,Airflow支持多个DAG,而Luigi不允许用户在管道执行之前查看DAG的任务。

  另一个重要点是用户界面。 尽管Luigi提供了最小的UI,但Airflow带有详细,易于使用的界面,使您可以轻松查看和运行任务命令。

  此外,Airflow的优点(社区贡献)包括服务水平协议,触发规则,图表和XCom,而Luigi则没有。

  最后的话

  这两种开源工作流系统都因其核心设计和功能而广受欢迎。

  在社区方面,Airflow赢得了比赛,但是如果您打算使用Hadoop或Google BigQuery,请看看Luigi。

  尽管Luigi较容易上手,但Airflow提供了更具表现力的可视化和支持。 归根结底,由您的团队来确定您的技术需求是什么。

  (本文翻译自SeattleDataGuy的文章《Airbnb's Airflow Versus Spotify's Luigi》


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部