专栏首页暴走大数据工作流引擎比较:Airflow、Azkaban、Conductor、Oozie和 Amazon Step Functions

工作流引擎比较:Airflow、Azkaban、Conductor、Oozie和 Amazon Step Functions

声明

我不是任何这些引擎的专家,但已经使用了其中的一些(Airflow和Azkaban)并检查了代码,对于其他一些产品,我要么只阅读代码(Conductor)或文档(Oozie / AWS步骤函数),由于大多数是OSS项目,我当然可能错过了某些未记录的功能或社区贡献的插件。如果你发现任何错误,我很乐意更新。

底线:阅读本文时请自行判断。

Airflow

优点

与所有其他解决方案相比,Airflow是一种功能超强的引擎,你不仅可以使用插件来支持各种作业,包括数据处理作业:Hive,Pig(尽管你也可以通过shell命令提交它们),以及通过文件/ db entry / s3来触发的一般流程管理,或者等待来自Web端点的预期输出,但它也提供了一个很好的UI,允许你通过代码/图形检查DAG(工作流依赖性),并监视作业的实时执行。

目前充满活力的社区也可以高度定制Airflow。你可以使用本地执行程序通过单个节点运行所有作业,或通过Celery / Dask / Mesos编排将它们分发到一组工作节点。

缺点

Airflow本身仍然不是很成熟(实际上Oozie可能是这里唯一的“成熟”引擎),调度程序需要定期轮询调度计划并将作业发送给执行程序,这意味着它将不断地从“盒子”中甩出大量的日志。

由于它通过“滴答”定期轮询工作,你的工作不能保证“实时”安排,随着并发工作数量的增加,这会变得更糟。

同时,由于你有一个集中式调度程序,如果它出现故障或卡住,你的正在运行的作业将不会像执行程序的作业那样受到影响,但是不会安排新的作业了。当你使用HA设置运行时,这尤其令人困惑,其中你有多个Web节点,调度程序,代理(通常是Celery案例中的消息队列),多个执行程序。当调度程序因任何原因而卡住时,你在Web UI中看到的所有任务都在运行,但实际上它们实际上并没有向前运行,而执行程序却高兴地报告它们没问题。换句话说,默认监控仍然远非银弹。

从初看起来,Web UI非常好用,然而,它有时会让新用户感到困惑。我的DAG运行是什么意思,我的任务竟然没有状态?这些图表也不是搜索友好的,更不用说一些功能还远远没有详细记录(尽管文档看起来确实很好,我的意思是,与Oozie相比,后者似乎已经过时了)。

回填设计在某些情况下是好的,但在其他情况下非常容易出错。如果你的cron计划已禁用并且稍后重新启用,那么它会尝试追赶,如果你的工作不是幂等的,那么就会发生真实的无可挽回的事情。

Azkaban

优点

在所有引擎中,Azkaban可能是最容易开箱即用的。UI非常直观且易于使用。调度和REST API工作得很好。

有限的HA设置开箱即用。不需要负载均衡器,因为你只能有一个Web节点。你可以配置它如何选择执行程序节点然后才能将作业推送到它,它通常看起来非常好,只要有足够的容量来执行程序节点,就可以轻松运行数万个作业。

缺点

作为通用编排引擎,它没有非常丰富的功能,但可能不是最初设计的目的,它的优势在于对Hadoop / Pig / Hive的原生支持,尽管你也可以使用命令行实现这些功能,但它本身不能通过Airflow等外部资源触发工作,也不支持工作等待模式。虽然你可以通过java代码/脚本实现比较繁忙的工作,但这会导致资源利用率下降。

与其他文档和配置相比,文档和配置通常有点混乱。它可能不应该推荐为初学者使用,设计很好但是你最好有一个大型数据中心来运行执行程序,因为当执行程序耗尽资源而没有额外的监视功能时,调度会停止。与其他代码相比,整体代码质量有点朝向低端,所以它通常只有在资源不成问题时才能很好地扩展。

设置/设计不是云友好的。你几乎应该拥有稳定的裸机,而不是动态分配具有动态IP的虚拟实例。如果机器消失,调度会“向南飘移”。

监控部分通过JMX可接受(似乎没有记录)。但是,如果你的机器负载很重,它通常不会很好,因为端点可能会卡住。

Conductor

优点

将Conductor引入本次比较有点不公平,因为它的真正目的是微服务编排,无论这意味着什么,它的HA模型涉及一定数量的服务器,它们位于负载均衡器后面,将任务放入消息队列中,工作节点将轮询这个队列,这意味着你不太可能遇到停滞的调度。在API参数化执行的帮助下,如果你正确设置负载均衡器/服务发现层,它实际上非常擅长调度和扩展。

缺点

用户界面需要更多的提高,目前监控非常有限。虽然通用调度可能已经足够好了。

这是开箱即用的裸机。甚至没有运行shell脚本的本机支持,尽管通过python实现任务工作者很容易通过提供的示例完成工作。

Oozie

优点

Oozie通过db设置提供了一个看似可靠的HA模型(貌似b / c我没有看到它),它为Hadoop相关工作提供本机支持,因为它是为该生态系统构建的。

缺点

对于通用流程调度而言,不是一个非常好的候选者,因为XML定义对于定义轻量级作业非常冗长和繁琐。

它还需要相当多的外设设置。你需要一个zookeeper集群,一个db,一个负载均衡器,每个节点都需要运行像Tomcat这样的Web应用程序容器。初始设置也需要一些时间,这对初次使用的用户来说是不友好的。

Step函数

优点

亚马逊云的步骤函数是相当新(2016年12月推出),然而,未来似乎很有希望。凭借云平台和lambda函数的HA特性,它几乎感觉它可以轻松地无限扩展(与其他人相比)。

它还为通用工作流处理提供了一些有用的功能,如等待支持和基于输出的动态分支。

它也相当便宜:如果你没有运行成千上万的工作,这可能比运行你自己的集群更好。

缺点

只能由AWS用户使用。如果你还不是其中之一,那就木有办法了。

Lambda需要额外的工作来进行生产级迭代/部署。

没有用户界面(很好,但它实际上只是一个控制台)。因此,如果你需要任何级别的监控,你需要自己使用cloudwatch构建它。

本文分享自微信公众号 - 暴走大数据(zhouqiantanxi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何做好 Elasticsearch 性能指标监控

    场景描述:本文是较早的一篇关于Elasticsearch性能指标监控的博文,内容总结全面,作者 Emily Chang,原文地址:https://www.dat...

    暴走大数据
  • Druid架构面面观

    场景描述:大数据时代,对于数据的各种操作要求往往是分离开的,比如有专门的系统负责插入,有专门的系统负责查询。druid的就很好的体现了这一点。

    暴走大数据
  • 三种State Backends | 你该用哪个?

    场景描述:当Flink程序的checkpoint被激活时,状态会被持久化到checkpoint,以防止数据丢失和无缝恢复。状态在内部如何组织和它们如何以及在哪持...

    暴走大数据
  • WebAuthn 成为正式 Web 标准

    万维网联盟(W3C)与 FIDO 联盟近日宣布,Web 认证(Web Authentication,简称 WebAuthn)现已成为正式 Web 标准。 Web...

    grain先森
  • 04-树5. File Transfer--并查集

      对于一个集合常见的操作有:判断一个元素是否属于一个集合;合并两个集合等等。而并查集是处理一些不相交集合(Disjoint Sets)的合并及查询问题的有利工...

    llhthinker
  • Java实现常见排序算法(一)

    在开发过程中使用得比较多的算法就是排序算法和查找算法了,今天先盘点一下常见的排序算法中的两个大类交换排序和插入排序。

    算法与编程之美
  • 探索EMT的中间态

    文章题目是:Identification of the tumour transition states occurring during EMT. Natur...

    生信技能树jimmy
  • 海量数据迁移之sqlldr和datapump的缺点分析(r4笔记第74天)

    在数据迁移中,sql*loader和datapump总是作为一些常用的数据迁移方案,自己在经历了一些项目之后,优点就不说了,说点这些方案的缺点,批评不自由,则赞...

    jeanron100
  • Java中modCount的用法,fail-fast机制

    在线程不安全的集合类中,都有这个用法。我们以AbstractList为例,拿出源码中的解释:

    IT云清
  • 简单工厂模式

    一、简单工厂模式的相关概念: 1、定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式。 其核心思想就是有一...

    用户1215536

扫码关注云+社区

领取腾讯云代金券