开源数据流管道-Luigi vs Azkaban vs Oozie vs Airflow
原文链接:https://www.jianshu.com/p/4ae1faea733b
随着企业的发展,他们的工作流程变得更加复杂,越来越多的有着错综复杂依赖关系的工作流需要增加监控,故障排除。如果没有明确的血缘关系。就可能出现问责问题,对元数据的操作也可能丢失。这就是有向无环图(DAG),数据管道和工作流管理器发挥作用的地方。
复杂的工作流程可以通过DAG来表示。DAG是一种图结构。信息必须沿特定方向在顶点间传递,但信息无法通过循环返回起点。DAG的构建快是数据管道,或者是一个进程的输入成为下一个进程的输入的顺序进程。
构建这些管道可能会很棘手,但幸运的是,有几个开源的工作流管理器可用于解决这个问题,允许程序员专注于单个任务和依赖关系。为了帮助您选择各种可用的工作流程管理器,我们在下面讨论了其中的几个。
Luigi

Luigi是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

Azkaban是另一个在LinkedIn上创建的开源工作流管理器,用于基于时间的Hadoop批处理作业的依赖性调度。与Luigi不同,它是用Java编写的,调度是通过Web浏览器在GUI中完成的。它由一个AzkabanWebServer组成,该服务器充当用户界面并处理项目管理,认证,调度和监控执行,一个用于元数据的MySQL数据库和一个AzkabanExecutorServer(以前web服务器和执行器服务器被合并为一个,但随着Azkaban的发展,它将两者分开以帮助对用户进行升级)。当前版本3.0有三种模式可供选择:单一服务器的试用模式,生产环境的双服务器模式以及分布式多执行器模式。Azkaban的设计以可用性为主要目标;因此,它包含一个特别易于使用的用户界面,具有出色的可视化效果。
特色
- 与任何版本的Hadoop兼容
- 简单的Web和HTTP工作流程上传
- 模块化,可插入每个Hadoop生态系统
- 跟踪用户操作,身份验证和授权
- 为每个新项目提供一个单独的工作区
- 提供有关SLA,失败和成功的电子邮件警报
- 允许用户重试失败的作业
Oozie

像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

Airflow由Airbnb于2015年创建,用于创作,滴哦独和监控DAG工作流程。它是为编程环境而开发的,重点在于创作。与Luigi类似,它是基于Python的工作流DAG,它被定义为代码,使其尽可能地协作,并确保它可以很容易地进行维护,版本化和测试。该体系结构由源代码管理中的作业定义组成;一个命令行界面,您可以在其中测试,运行并描述DAG的各个部分;用于探索依赖性,进度,元数据和日志的Web应用程序;一个元数据库;运行分布式作业任务实例的Worker以及在任务实例准备好运行时触发任务实例的调度程序进程。
特色:
- 丰富的CLI和用户界面,允许用户可视化依赖关系,进度,日志,相关代码以及白天完成各种任务的时间
- 模块化,可扩展且高度可扩展
- 使用Jinja模板引擎构建参数化脚本
- 提供有关搜索排名和会话信息的分析,以跟踪用户的点击流量和时间消耗
- 可以与Hive,Presto,MySQL,HDFS,Postgres或S3进行交互
作者:阿海与蜗牛
链接:https://www.jianshu.com/p/4ae1faea733b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
开源数据流管道-Luigi vs Azkaban vs Oozie vs Airflow的更多相关文章
- Hadoop工作流引擎之Azkaban与Oozie对比(四)
Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/93883 ...
- Azkaban和Oozie的区别
Azkaban和Oozie的区别: 当前,实际生产中最流行的两种Hadoop工作流引擎是Azkaban与Oozie.但活跃度最高的当是Azkaban了,下面对两者的异同之处作如下对比. 功能对比 Az ...
- [Big Data - Suro] Netflix开源数据流管理器Suro
Netflix近日开源了一个叫做Suro的工具,公司可以利用它来做数据源主机到目标主机的实时定向.它不只在Netflix的数据管道上扮演重要角色,大规模下的应用场景同样令人印象深刻. Netflix各 ...
- Oozie和Azkaban的技术选型和对比
1 两种调度工具功能对比图 下面的表格对上述2种hadoop工作流调度器的关键特性进行了比较,尽管这些工作流调度器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在区别 特性 ...
- SSIS 数据流的执行树和数据管道
数据流组件的设计愿景是快速处理海量的数据,为了实现该目标,SSIS数据源引擎需要创建执行树和数据管道这两个数据结构,而用户为了快速处理数据流,必须知道各个转换组件的阻塞性,充分利用流式处理流程,利用更 ...
- GitHub 开源工具整理
技术站点 Hacker News:非常棒的针对编程的链接聚合网站 Programming reddit:同上 MSDN:微软相关的官方技术集中地,主要是文档类 infoq:企业级应用,关注软件开发领域 ...
- Flume+Sqoop+Azkaban笔记
大纲(辅助系统) 离线辅助系统 数据接入 Flume介绍 Flume组件 Flume实战案例 任务调度 调度器基础 市面上调度工具 Oozie的使用 Oozie的流程定义详解 数据导出 sqoop基础 ...
- 开源的.NET系统推荐
C# 源码 AForge.NET RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的 ...
- oozie配置安装与原理
概述 当前开源的hadoop任务工作流管理主要有oozie和Azkaban,本文先介绍oozie的配置安装与基本运行原理. 配置安装 (参考https://segmentfault.com/a/11 ...
随机推荐
- Python 标准输出 sys.stdout 重定向(转)
add by zhj: 其实很少使用sys.stdout,之前django的manage.py命令的源码中使用了sys.stdout和sys.stderr,所以专门查了一下 这两个命令与print的区 ...
- Redis 安装、配置、集群
1. Redis的安装 1.1. Redis的安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: ...
- 关于WARN Dispatcher:68 - Could not find action or result报错
出现这个错 00:03:37,142 WARN Dispatcher:68 - Could not find action or result: /crm/linkMan_addLinkMan.act ...
- 20170725 Python 必须使用的Url编码
-- 1 原因:在进行API 调用传参时,如果出现了和区分参数标识一样的特殊字符,那么就需要编码来作用 或者,传递的参数有敏感数据. 我的目的: Python开发的接口,C#调用传递参数 先用C# 进 ...
- Python3学习之路~2.7 文件操作
对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下 Somehow, it seems the love I knew was always the ...
- MSDN、OEM、VOL、RETAIL密钥区别
本文就介绍一下Windows的密钥的一些使用要点及注意事项,涉及到最常用的MSDN密钥.OEM密钥.VOL密钥和零售密钥激活问题,希望对大家有所帮助. 一.MSDN密钥 MSDN密钥是付费用户提前获得 ...
- sap gui 配置
1: sap gui 安全配置 ,在左下角搜索sap gui configuration.
- (转)从拜占庭将军问题谈谈为什么pow是目前最好的共识机制
我们知道基于区块链技术现在有很多的共识机制,包括不限于POW,POS,DPOS,PBFT……,我先不说为什么我最认可POW,我们先来看看著名的拜占庭将军问题: 拜占庭帝国即中世纪的土耳其,拥有巨大的财 ...
- 备份软件 FreeFileSync 怎么用
现在,学会使用备份软件对电脑中的重要资料定期进行备份,已经成为许多办公一族的“必修课”.其中,FreeFileSync 作为一款由国外开源社区开发的免费备份软件,由于其支持跨平台(Windows.Li ...
- php 中 get_cfg_var() 与 ini_get() 的异同
背景 get_cfg_var() 取的值是配置文件中的值 ini_get() Gets the value of a configuration option, 则取的当前值(运行时,PHP系统定义) ...