2.2 工作流调度
一个完整的数据分析系统通常都是由大量任务单元组成:shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等。
各任务单元之间存在时间先后及前后依赖关系
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
一个 workflow scheduler system 需要的主要功能有:
- DAG 定义: DAG (Directed acyclic graph) 有向无环图。DAG 的定义方式:表达式,脚本定义,通过 WEB UI 定义;还需要支持子 DAG)
- 执行节点 (节点类型:unix cmd, shell, python, mapreduce, logging etc…)
- 节点控制(ignore, retry, suspend, run now, test mode)
- Metrics (需要对比一段时间内任务的运行时间)
- Monitor (失败策略,报警通知功能)
- CLI & Web UI (查询 workflow 执行情况,以及简单的控制)
工作流调度实现方式
- 简单的任务调度(定时):直接使用 linux 的 crontab 来定义;
- 复杂的任务调度:开发调度平台
- 或使用现成的开源调度系统,比如 ooize、azkaban 等。
表格 17 常用工作流调度系统列表
工具 | 简介 | 优点 | 缺点 |
---|---|---|---|
Apache Ooize | 管理 hadoop 任务的工作流/协调系统。重量级的任务调度系统,功能全面,但是部署及配置会比较麻烦。 | 与 Hadoop 生态圈结合紧密。 | 通过 XML 文件来定义 DAG 依赖,维护复杂。 |
Azkaban | LinkedIn 创建的一个批处理工作流,用于跑 Hadoop 的 Jobs。所有的任务资源文件都需要打成一个 zip 包上传。 | ||
Cascading | 一个架构在 Hadoop 上的 API,用来创建复杂和容错数据处理工作流。 | ||
Hanmake | Hamake 是 Hadoop 的轻量级实用程序和工作流引擎。 Hamake 帮助在工作流中组织您的 Hadoop Map Reduce 作业、Pig 脚本和本地程序,并根据数据流原则启动它们 - 一旦有新数据可用,您的任务将立即执行。 | 社区活跃度低,仅 5stars。最近更新时间 2015 年 3 月。 | |
Zeus | Alibaba 开源的一个完整的 Hadoop 的作业平台,用于从 Hadoop 任务的调试运行到生产任务的周期调度。 | 针对 Hadoop 集群任务定制的,通用性不强。 | |
LTS | Light Task Scheduler 的简称,开源项目。华为内部有同名产品 LTS,基于此开源项目并参考 Ooize 作了功能增强。 | ||
Avro | 一个序列化数据系统。 | ||
Apache DolphinScheduler | 易观开源的轻量级工作流调度系统。2019.1 开源,2021.3 成为 Apache 顶级项目。 | 轻量级 |
表格 18 Hadoop 工作流调度器比较
特性 | Apache Oozie | Azkaban | Cascading | Hamake |
---|---|---|---|---|
工作流 描述语言 | XML (xPDL based) | text file with key/value pairs | Java API | XML |
依赖机制 | explicit | explicit | explicit | data-driven |
是否要 web 容器 | YES | YES | NO | NO |
进度跟踪 | web page | web page | Java API | console/log messages |
Hadoop job 调度支持 | YES | YES | YES | no |
运行模式 | daemon | daemon | API | command line utility |
Pig 支持 | yes | yes | yes | yes |
事件通知 | no | no | yes | no |
需要安装 | yes | yes | no | no |
支持的 hadoop 版本 | 0.20+ | currently unknown | 0.18+ | 0.18+ |
重试支持 | workflownode evel | yes | yes | no |
运行任意命令 | yes | yes | yes | yes |
Amazon EMR 支持 | no | currently unknown | yes | yes |
Apache Oozie
简介
Apache Oozie 是一个基于工作流引擎的开源框架,它能够提供对 Hadoop 作业的任务调度与协调。
结构
Oozie 引擎是一个 Web App 应用,默认集成到 Tomcat 中,采用 pg 数据库。
基于 Ext 提供 WEB Console,该 Console 仅提供对 Oozie 工作流的查看和监控功能。通过 Oozie 对外提 REST 方式的 WS 接口,Oozie client 通过该接口控制(启动、停止等操作)Workflow 流程,从而编排、运行 Hadoop MapReduce 任务,如 图 1 所示。
图 1 Oozie 框架
表 1 结构图说明 | |
---|---|
名称 | 描述 |
Console | 提供对 Oozie 流程的查看和监控功能。 |
Client | 通过接口控制 workflow 流程:可以执行提交流程,启动流程,运行流程,终止流程,恢复流程等操作。 |
SDK | 软件开发工具包 SDK(SoftwareDevelopmentKit)是被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 |
Database | pg 数据库。 |
WebApp(Oozie) | webApp(Oozie)即 Oozie server,可以用内置的 Tomcat 容器,也可以用外部的,记录的信息比如日志等放在 pg 数据库中。 |
Tomcat | Tomcat 服务器是免费的开放源代码的 Web 应用服务器。 |
Hadoop 组件 | 底层执行 Oozie 编排流程的各个组件,包括 MapReduce、Hive 等。 |
原理
Oozie 是一个工作流引擎服务器,用于运行 HD MapReduce 任务工作流。同时 Oozie 还是一个 Java Web 程序,运行在 Tomcat 容器中。
Oozie 工作流通过 HPDL(一种通过 XML 自定义处理的语言,类似 JBOSS JBPM 的 JPDL)来构造。包含“Control Node”(可控制的工作流节点)、“Action Node”。
“Control Node”用于控制工作流的编排,如“start”(开始)、“end”(关闭)、“error”(异常场景)、“decision”(选择)、“fork”(并行)、“join”(合并)等。
Oozie 工作流中拥有多个“Action Node”,如 MapReuce、Java 等。
所有的“Action Node”以有向无环图(DAG Direct Acyclic Graph)的模式部署运行。所以在“Action Node”的运行步骤上是有方向的,当上一个“Action Node”运行完成后才能运行下一个“Action Node”。一旦当前“Action Node”完成,远程服务器将回调 Oozie 的接口,这时 Oozie 又会以同样的方式执行工作流中的下一个“Action Node”,直到工作流中所有“Action Node”都完成(完成包括失败)。
Oozie 工作流提供各种类型的“Action Node”用于支持不同的业务需要,如 MapReduce,HDFS,SSH,Java 以及 Oozie 子流程。
Apache DolphinScheduler
Apache DolphinScheduler 是一个开源的分布式工作流调度系统,主要用于大数据和 ETL(提取、转换、加载)任务的调度和管理。它的设计目标是提供高可用、高性能和易于使用的工作流管理解决方案。以下是一些关键特性和组件的详细介绍:
主要特性
可视化工作流设计 :
- DolphinScheduler 提供一个用户友好的图形界面,用户可以通过拖放的方式设计工作流,直观地创建复杂的调度任务。
分布式架构 :
- 系统采用分布式架构,可以横向扩展,支持多节点部署,确保高可用性和负载均衡。
任务调度 :
- 支持定时调度、依赖调度和动态调度,用户可以灵活地设置任务的执行时间和条件。
多种任务类型支持 :
- 支持多种任务类型,包括 Shell、Python、Java、Spark 等,方便用户根据不同需求进行选择。
任务监控与日志管理 :
- 提供任务执行状态的监控,可以实时查看任务的运行情况,并且有详细的日志记录,方便排错和分析。
扩展性 :
- 支持插件机制,用户可以根据需要扩展功能,定制化工作流。
组件介绍
调度器(Scheduler) :
负责任务的调度和管理,根据设定的规则和条件触发任务。工作流引擎(Workflow Engine) :
处理工作流的执行逻辑,保证任务按顺序和依赖关系执行。执行器(Executor) :
实际执行任务的组件,可以运行在不同的计算节点上。数据库(Metadata Storage) :
存储工作流的元数据、任务状态和执行日志,通常使用 MySQL、PostgreSQL 等关系型数据库。
使用场景
- 数据 ETL 任务调度
- 数据仓库管理
- 大数据处理任务调度
- 定时任务管理
社区与文档
DolphinScheduler 拥有活跃的开源社区,用户可以在 GitHub 上找到源代码、文档和示例。官方文档提供了详细的安装、配置和使用指南,方便用户快速上手。
如果你有具体的使用案例或想了解更多细节,可以告诉我!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论