开源数据流管道-Luigi vs Azkaban vs Oozi
随着企业的发展,他们的工作流程变得更加复杂,越来越多的有着错综复杂依赖关系的工作流需要增加监控,故障排除。如果没有明确的血缘关系。就可能出现问责问题,对元数据的操作也可能丢失。这就是有向无环图(DAG),数据管道和工作流管理器发挥作用的地方。
复杂的工作流程可以通过DAG来表示。DAG是一种图结构。信息必须沿特定方向在顶点间传递,但信息无法通过循环返回起点。DAG的构建快是数据管道,或者是一个进程的输入成为下一个进程的输入的顺序进程。
构建这些管道可能会很棘手,但幸运的是,有几个开源的工作流管理器可用于解决这个问题,允许程序员专注于单个任务和依赖关系。为了帮助您选择各种可用的工作流程管理器,我们在下面讨论了其中的几个。
Luigi
image.pngLuigi是Spotify在2011年开发的一个Python软件包,用于帮助构建生成推荐和顶级列表等任务所需的复杂流水线。它也被Foursquare,Stripe,华尔街日报,Groupon和其他知名企业使用。它内置Hadoop支持,但与专为Hadoop构建的类似工作流管理器Oozie和Azkaban不同,Luigi的理念是尽可能使所有内容尽可能通用。这使得它可以与其他任务一起扩展,例如Hive查询,Scala或Python中的Spark作业等。Luigi是基于代码的,而不是基于GUI或声明式的,包含Python中的所有内容(包括依赖关系图)。用户界面(UI)允许您搜索,过滤或监视每个任务的状态。您还可以查看该工作流程,以查看依赖关系图上的哪些任务已完成,哪些尚未运行。
特色
- 允许您根据需要并行化工作流程
- 带有常用任务模板的工具箱
- 支持Hadoop,Hive和Pig中的Python mapreduce作业
- 包括Hadoop分布式文件系统的文件系统抽象和确保所有系统都是原子的本地文件 ,防止它们在包含部分数据的状态下崩溃
Azkaban
image.pngAzkaban是另一个在LinkedIn上创建的开源工作流管理器,用于基于时间的Hadoop批处理作业的依赖性调度。与Luigi不同,它是用Java编写的,调度是通过Web浏览器在GUI中完成的。它由一个AzkabanWebServer组成,该服务器充当用户界面并处理项目管理,认证,调度和监控执行,一个用于元数据的MySQL数据库和一个AzkabanExecutorServer(以前web服务器和执行器服务器被合并为一个,但随着Azkaban的发展,它将两者分开以帮助对用户进行升级)。当前版本3.0有三种模式可供选择:单一服务器的试用模式,生产环境的双服务器模式以及分布式多执行器模式。Azkaban的设计以可用性为主要目标;因此,它包含一个特别易于使用的用户界面,具有出色的可视化效果。
特色
- 与任何版本的Hadoop兼容
- 简单的Web和HTTP工作流程上传
- 模块化,可插入每个Hadoop生态系统
- 跟踪用户操作,身份验证和授权
- 为每个新项目提供一个单独的工作区
- 提供有关SLA,失败和成功的电子邮件警报
- 允许用户重试失败的作业
Oozie
image.png像Azkaban一样,Oozie是一个用Java编写的用于Hadoop系统的开源工作流调度系统。然而,Oozie不同于Azkaban,因为它更少关注可用性,更多关注灵活性和创建复杂的工作流程。虽然Azkaban仅支持通过Web浏览器在GUI中进行基于时间的调度,但Oozie的协调器允许由时间,事件或数据可用性触发的作业考虑数据可用性无法预测的情况,并允许您通过命令行, Java API和Web浏览器,以及GUI。 Oozie也支持XML属性文件,而Azkaban是基于Java的。最后,Azkaban将所有正在运行的工作流的状态保存在其内存中,而Oozie使用SQL数据库,仅将其内存用于状态事务。
Oozie工作流程安排为DAG,控制节点定义了作业启动和停止的时间,决定,分叉和连接节点以及触发任务执行的动作节点。每个任务都有一个唯一的回调HTTP URL,当任务完成时通知URL。如果没有通知URL,Oozie将轮询任务以确定它是否完整。
特色
- 为mapreduce,Pig,Hive,Sqoop和Distcp提供开箱即用的支持,以及特定于系统的作业
可扩展,可靠和可扩展 - 相同的工作流程可以参数化并行运行
- 允许批量杀死,挂起或恢复作业
- 高可用性
- 多个协调员和工作流作业可以通过Oozie Bundle一起打包和管理
Airflow
image.pngAirflow由Airbnb于2015年创建,用于创作,滴哦独和监控DAG工作流程。它是为编程环境而开发的,重点在于创作。与Luigi类似,它是基于Python的工作流DAG,它被定义为代码,使其尽可能地协作,并确保它可以很容易地进行维护,版本化和测试。该体系结构由源代码管理中的作业定义组成;一个命令行界面,您可以在其中测试,运行并描述DAG的各个部分;用于探索依赖性,进度,元数据和日志的Web应用程序;一个元数据库;运行分布式作业任务实例的Worker以及在任务实例准备好运行时触发任务实例的调度程序进程。
特色:
- 丰富的CLI和用户界面,允许用户可视化依赖关系,进度,日志,相关代码以及白天完成各种任务的时间
- 模块化,可扩展且高度可扩展
- 使用Jinja模板引擎构建参数化脚本
- 提供有关搜索排名和会话信息的分析,以跟踪用户的点击流量和时间消耗
- 可以与Hive,Presto,MySQL,HDFS,Postgres或S3进行交互