标签:apr 体系 定义 特定 进度 返回 参数 分叉 无法
原文链接:https://www.jianshu.com/p/4ae1faea733b
随着企业的发展,他们的工作流程变得更加复杂,越来越多的有着错综复杂依赖关系的工作流需要增加监控,故障排除。如果没有明确的血缘关系。就可能出现问责问题,对元数据的操作也可能丢失。这就是有向无环图(DAG),数据管道和工作流管理器发挥作用的地方。
复杂的工作流程可以通过DAG来表示。DAG是一种图结构。信息必须沿特定方向在顶点间传递,但信息无法通过循环返回起点。DAG的构建快是数据管道,或者是一个进程的输入成为下一个进程的输入的顺序进程。
构建这些管道可能会很棘手,但幸运的是,有几个开源的工作流管理器可用于解决这个问题,允许程序员专注于单个任务和依赖关系。为了帮助您选择各种可用的工作流程管理器,我们在下面讨论了其中的几个。
Luigi是Spotify在2011年开发的一个Python软件包,用于帮助构建生成推荐和顶级列表等任务所需的复杂流水线。它也被Foursquare,Stripe,华尔街日报,Groupon和其他知名企业使用。它内置Hadoop支持,但与专为Hadoop构建的类似工作流管理器Oozie和Azkaban不同,Luigi的理念是尽可能使所有内容尽可能通用。这使得它可以与其他任务一起扩展,例如Hive查询,Scala或Python中的Spark作业等。Luigi是基于代码的,而不是基于GUI或声明式的,包含Python中的所有内容(包括依赖关系图)。用户界面(UI)允许您搜索,过滤或监视每个任务的状态。您还可以查看该工作流程,以查看依赖关系图上的哪些任务已完成,哪些尚未运行。
Azkaban是另一个在LinkedIn上创建的开源工作流管理器,用于基于时间的Hadoop批处理作业的依赖性调度。与Luigi不同,它是用Java编写的,调度是通过Web浏览器在GUI中完成的。它由一个AzkabanWebServer组成,该服务器充当用户界面并处理项目管理,认证,调度和监控执行,一个用于元数据的MySQL数据库和一个AzkabanExecutorServer(以前web服务器和执行器服务器被合并为一个,但随着Azkaban的发展,它将两者分开以帮助对用户进行升级)。当前版本3.0有三种模式可供选择:单一服务器的试用模式,生产环境的双服务器模式以及分布式多执行器模式。Azkaban的设计以可用性为主要目标;因此,它包含一个特别易于使用的用户界面,具有出色的可视化效果。
像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将轮询任务以确定它是否完整。
Airflow由Airbnb于2015年创建,用于创作,滴哦独和监控DAG工作流程。它是为编程环境而开发的,重点在于创作。与Luigi类似,它是基于Python的工作流DAG,它被定义为代码,使其尽可能地协作,并确保它可以很容易地进行维护,版本化和测试。该体系结构由源代码管理中的作业定义组成;一个命令行界面,您可以在其中测试,运行并描述DAG的各个部分;用于探索依赖性,进度,元数据和日志的Web应用程序;一个元数据库;运行分布式作业任务实例的Worker以及在任务实例准备好运行时触发任务实例的调度程序进程。
开源数据流管道-Luigi vs Azkaban vs Oozie vs Airflow
标签:apr 体系 定义 特定 进度 返回 参数 分叉 无法
原文地址:https://www.cnblogs.com/shujuxiong/p/10329611.html