大数据是复杂的,我已经写了很多关于广阔的生态系统和广泛的可用选项的文章。 通常被忽略但很关键的一个方面是管理大数据管道的不同步骤的执行。 框架的决定或执行过程的设计经常会推迟到稍后的阶段,从而导致许多问题并延误项目。
您应该尽早设计管道编排,以避免在部署阶段出现问题。 编排应像其他可交付成果一样对待; 所有利益相关者都应该对其进行计划,实施,测试和审查。
编排框架通常被忽略,许多公司最终为其管道实施定制解决方案。 这不仅成本高昂,而且效率低下,因为自定义业务流程解决方案往往会面临现成框架已经解决的相同问题。 造成漫长的反复试验。
在本文中,我将介绍一些最常见的开源业务流程框架。
管道编排
数据管道编排是一个交叉过程,可管理管道任务之间的依赖关系,调度作业等。 如果使用流处理,则需要编排每个流应用程序的依赖关系,而对于批处理,则需要安排和编排作业。
请记住,任务和应用程序可能会失败,因此您需要一种以统一的方式调度,重新调度,重放,监视,重试和调试整个数据管道的方法。
业务流程框架提供的一些功能是:
让我们回顾一下一些选项…
Apache Oozie
Apache Oozie是Hadoop的调度程序,作业创建为DAG,并且可以由基于cron的调度或数据可用性触发。 Oozie是作为Java Web应用程序运行的可伸缩,可靠和可扩展的系统。 它与Sqoop等提取工具和Spark等处理框架集成在一起。
Oozie工作流程定义以hPDL(XML)编写。 工作流包含控制流节点和动作节点。 控制流节点定义工作流的开始和结束(开始,结束和失败节点),并提供一种机制来控制工作流的执行路径(决策,派生和联接节点)[1]。
动作节点是一种机制,工作流通过该机制触发任务的执行。 Oozie支持不同类型的操作(map-reduce,Pig,SSH,HTTP,电子邮件…),并且可以扩展以支持其他类型的操作[1]。
同样,可以对工作流程进行参数设置,并且可以同时执行几个相同的工作流程作业。
它是Hadoop的第一个调度程序,非常流行,但是已经有点过时了,如果您完全依赖Hadoop平台,它仍然是一个不错的选择。
Apache Airflow
Airflow是一个平台,可用于计划,运行和监视工作流程。 由于其易用性和创新的工作流作为代码方法,它已成为大数据管道的最著名协调者,其中DAG在Python代码中定义,可以像其他任何可交付的软件一样进行测试。
它使用DAG创建复杂的工作流程。 图中的每个节点都是一个任务,边定义了任务之间的依赖关系。 任务分为两类:
Airflow Scheduler在遵循您描述的指定依赖项的同时,在一组工作线程上执行您的任务。 它具有模块化架构,并使用消息队列来协调任意数量的工作程序,并且可以扩展到无穷大[2]。
它为您生成DAG,从而最大程度地提高了并行度。 DAG是用Python编写的,因此您可以在本地运行它们,对其进行单元测试并将其与开发工作流程集成。 当工作流定义为代码时,它们变得更加可维护,可版本控制,可测试和协作[2]。
丰富的用户界面可以轻松地可视化生产中运行的管道,监视进度并在需要时对问题进行故障排除[2]。 它快速,易于使用且非常有用。 它具有多种视图和多种方法来解决问题。 它保留了运行的历史记录,以供以后参考。
> Airflow UI[2]: https://airflow.apache.org/docs/stable/
安装非常简单。 您只需要Python。 它具有两个独立运行的进程,即UI和Scheduler。
原则[2]:
尽管气流是作为代码编写的,但是气流并不是数据流解决方案[2]。 此外,工作流预计大部分是静态的或缓慢变化的,对于非常小的动态作业,还有其他选项,我们将在后面讨论。
尽管XCOM功能用于在经常需要的任务之间传递小的元数据,例如当您需要某种相关性ID时,它却是简单且无状态的。 它还支持变量和参数化作业。 最后,它具有支持SLA和警报。 它可以与用于监视的通话工具集成在一起。
Luigi是具有类似功能的Airflow的替代产品,但Airflow具有更多功能,并且比Luigi具有更好的扩展性。
Dagster
Dagster是机器学习,分析和ETL的新编排者[3]。 主要区别在于,您可以像Apache NiFi一样跟踪数据的输入和输出,从而创建数据流解决方案。 这意味着它可以跟踪执行状态,并可以将值具体化为执行步骤的一部分。 您可以使用数据管道和资产的统一视图在本地测试并在任何地方运行。 它支持任何云环境。
Dagster对业务流程图中各步骤之间的数据依赖关系进行建模,并处理它们之间的数据传递。 输入和输出上的可选类型有助于尽早发现错误[3]。 管道由共享的,可重用的,可配置的数据处理和基础架构组件构建而成。 Dagster的网络用户界面使任何人都可以检查这些对象并发现如何使用它们[3]。
> Dagster UI[4]: https://docs.dagster.io/
它还可以并行运行多个作业,易于添加参数,易于测试,提供简单的版本控制,出色的日志记录,故障排除功能等等。 与Airflow相比,它具有更多功能,但是它还有些不成熟,并且由于它需要跟踪数据,因此可能难以扩展,由于状态性,这是NiFi面临的一个问题。 而且它很大程度上基于Python生态系统。
Prefect
Prefect与Dagster相似,提供本地测试,版本控制,参数管理等等。 它也是基于Python的。
Prefect之所以与众不同,是为了克服Airflow执行引擎的局限性,例如改进的调度程序,参数化的工作流,动态工作流,版本控制和改进的测试。 对于许多面向DevOps的组织来说,必须具有版本控制功能,但Airflow仍不支持版本控制,Prefect确实支持该功能。
它具有一个核心的开源工作流管理系统以及一个完全不需要设置的云产品。 Prefect Cloud由GraphQL,Dask和Kubernetes支持,因此可以随时使用[4]。 UI仅在云产品中可用。
Apache NiFi
Apache NiFi不是业务流程框架,而是更广泛的数据流解决方案。 NiFi还可以安排作业,监视,路由数据,警报等等。 它专注于数据流,但您也可以处理批处理。
它不需要任何类型的编程,并提供拖放UI。 它非常易于使用,您可以将其用于中等难度的作业,而不会出现任何问题,但是对于较大的作业,它往往存在可伸缩性问题。
它在Hadoop外部运行,但可以触发Spark作业并连接到HDFS / S3。
> NiFi UI[5]: https://nifi.apache.org/
用例
让我们看一些例子…
结论
我们似乎是一些最常见的业务流程框架。 如您所见,它们中的大多数将DAG用作代码,因此您可以在将新的工作流程投入生产之前在本地进行测试,调试管道并对其进行正确的测试。 考虑本文讨论的所有功能,并选择最适合该工作的工具。
简而言之,如果您的需求只是编排不需要共享数据的独立任务,并且/或者您的工作很慢,并且/或者您不使用Python,请使用Airflow或Ozzie。 对于需要数据沿袭和跟踪的数据流应用程序,请对非开发人员使用NiFi; 或Dagster或Prefect(适用于Python开发人员)。
在可能的情况下,请尝试使工作保持简单并在Orchestrator外部管理数据依赖关系,这在Spark中很常见,在Spark中您将数据保存到深度存储中而不传递。 在这种情况下,Airflow是一个不错的选择,因为它不需要跟踪数据流,并且您仍然可以使用XCOM传递小的元数据,例如数据的位置。 对于更小,运行速度更快,基于python的作业或更多动态数据集,您可能希望在Orchestrator中跟踪数据依赖性并使用Dagster之类的工具。
客户简介 趣医网(quyiyuan.com)创立于2014年,为京颐集团重要成员企业之一,是...
API风格说明 当前ECS服务对外开放两类风格的API: ECS服务自定义规范的API(以下...
3月24日,腾讯发布2020年Q4及全年财报,其中金融科技及企业服务第四季收入385亿...
??提到慕尼黑,大家第一个想到总是啤酒节,其实慕尼黑的文化同样闻名世界。慕尼...
云虚拟主机 可以干什么?云 虚拟主机 可以是搭 建网站 的重要产品,可用来存放网...
客户简介 全民直播是一家涵盖游戏、娱乐、户外等多领域泛娱乐的直播平台。2015年...
公司介绍 我们公司是全球法律服务整合平台,已有的4万多名律师遍布全国359个城市...
注册了 域名 不备案可以吗?可以的。 注册域名 并不是一定要备案的,只有搭 建网...
排查思路 无法通过远程桌面连接裸金属服务器时,我们推荐您按照以下思路排查问题...
案例背景 高校健康打卡项目发起于北京大学软件与微电子学院,是该学院张齐勋老师...