Apache Oozie- 节点类型 (control flow. action) & 工作流类型 (coordinator. bundle)|学习笔记

简介: 快速学习 Apache Oozie- 节点类型 (control flow. action) & 工作流类型 (coordinator. bundle)

开发者学堂课程【Oozie 知识精讲与实战演练 Apache Oozie- 节点类型 (control flow. action) & 工作流类型 (coordinator. bundle)】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/716/detail/12782


Apache Oozie-- 节点类型 (control flow、action)&; 工作流类型 (coordinator、bundle)


内容介绍

一.Oozie 基本原理

二.Oozie 工作流类型

三.总结


一.0ozie 基本原理

Oozie 对工作流的编排,是基于 workflow.xml 文件来完成的。用户预先将工作流执行规则定制于 workfIow.xml 文件中,并在 job.properties 配置相关的参数,然后由 Oozie Server 向 MR 提交 job 来启动工作流。

在基本原理当中,重点学习流程节点的类型。作为开发者,想要使用进行工作流调度时,最大的工作量是编写 work flow xml 文件。xml 文件中有很多的标签、属性进行约束,oozie 当中工作流的核心就是基于 xml 文件进行编排编写,将业务需求的规则按照语法定义在 xml 文件当中,再编写 job.properties 配置文件,一起提交给 oozie 服务器,然后开始提交 mr 执行。如何执行并不是关键,重点在于保证 xml 文件编写是正常的,符合规范的,并且满足于业务需求的。

1.流程节点

工作流由两种类型的节点组成,分别是:Control Flow 与 Action。

Control Flow Nodes: 控制工作流执行路径,工作流无论往哪个方向走、先左先右、合并分开都是通过此节点控制。

包括 start 开始节点,结束节点 end,kill 杀死节点, decision 判断节点,特殊节点有两个,Fork 分开做不同任务, join 合并做任务,与 Fork 相反。

可以描绘出工作流路径(开始地点、方向),但具体配合详细内容通过下方节点

Action Nodes 动作节点:决定每个操作执行的任务类型,包括 MapReduce、java、hive、shel 等,是具体任务类型工作节点,此两个节点配合形成有向无环图。

图片1.png

红色可能是开始节点,此时来到这里做执行,执行完成后进到下面这里打了一个问号,说明这里做了一个判断,显示了各条件下如何操作。此时构成有向无环图,有方向,但又不会回到最初的起点,这就是当中的一个流程节点类型的问题。存在示例,进行查看,做相关了解。

caction name-"first">

cmap-reduce>

caction names"second">

cok tos"end/>

cerror to="fail"/>

daction>

ckill namee"fail">

Map/Reduce failed,error

message[S(wt:error Message(wt:lastError Node0)/message>

/kill>

cend name-"end/

/work flow-app>

上方为流程编排的一个举例,使用 xml 文件。

工作流是 stat 节点开始的,由 start 进入(to)first. 存在较多的 action 节点(并行节点)执行,具体如何执行,是否为并行看具体如何串行,从 start 开始到跳转到 first,此中描述 map reduce 任务程序,map 执行后通过控制节点控制,ok 表示执行成功,成功的话 to second 来到第二个节点,如果失败,就马上到失败节点,这样就相当于在这里做一个判断,成功到哪里,失败到哪里,执行成功则进入second,失败则进入 fail,将两个 action 间做依赖配置,先 first 执行成功后流转进入 second,second 中是一个 JAVA 程序,Second 执行成功后,进入 end 节点,表示流程结束

Oozie 使用 HPDL 来构造工作流,只有当上一个节点执行完成,才会进入下一个节点。

所有“Action Nodes”均有向无环图(DAG Direct Acyclic Graph) 的模式部署,不在闭环流程.

节点如果失败了,这里还有一个叫做 kill 杀死节点,kill技能是杀死,比如失败,将把当前的程序杀死,打印错误内容,可以发现这样首尾相连,按照流程往前走,就形成了有向无环图的一个概念,都是需要是通过 xml 文件来配置的,这又是工作当中流程节点的类型。

在后面进行具体操作的时候,可以感受到各种不同类型节点的相关配置。当中最大工作量就是 action 节点,是程序还是 JAVA 程序或者其他程序都需要具体相关的描述。


二.Oozie 工作流类型

Oozie 本身并不满足周期,存在3种工作流类型

1.WorkFlow

普通、规则相对简单,不涉及定时、批处理的工作流。顺序执行流程节点。

Workflow 有个大缺点:没有定时和条件触发功能。

下图,左边的是一个 start 开始节点,开始之后,首先来到第一个 mr 节点,mr 进行成功后来到第二个 pig 节点,这两个就是所谓的 action node,到 pig 结完之后来了一个 Fork。fork 节点说明在这里做了分叉,mr 和 hive 这两个就可以去并行的执行,彼此之间没有依赖关系,这两个执行完之后就要做一个结果的合并,一起来到最终 end 节点,这样就构成了一个有向无关图,在这个图当中 start,等就是刚才所说的 control flow 节点, mr,pig,hivre 是 Action Nodes 动作节点。

图片2.png

因此也不具备周期性执行,只会按照流程按照顺序去执行,手动执行就结束。在企业当中或者说我们使用当中肯定是需要某些场合进行条件触发周期性定制执行的,这时候又提供了第二种工作流类型叫做 coordinate, 叫做协调者,通俗解释为给第一种类型的配置一个小伙伴用来制定闹钟,闹钟一旦满足时间或者满足条件之后,就会去敲打 fork 通知去执行。

2.Coordinator

协调者,给第一种类型配置闹钟,闹钟满足一定条件后会触发执行。

Coordinator 将多个工作流 Job 组织起来,称为 Coordinator Job, 并指定触发时间和频率,还可以配置数据集、并发数等,类似于在工作流外部增加了一个协调器来管理这些工作流的工作流 Job 的运行。

在这个图上,中间是工作流,只不过自己本身并不会自动触发执行,看左边 start是开始触发条件,第一种叫做开始时间(stsrt time),可以去定制合适的时间,当到达时间后自动执行,此时满足定时执行。在定时执行后配上适当周期比如十点钟执行,每隔一分钟执行一次,此时就完成定时周期执行。另外一个功能,根据输入数据是否可用来触发执行,比如做大数据的计算,分析,预处理的前提,如果前一天的数据没有收集,后面都不用进行,因此可以配置一个叫做输入数据是否可用,首先进行判断,判断根目录下是否有数据,如果存在数据继续执行后面的工作流,如果没有数据就不再执行,此时也可以触发,进行配合 oozie 就可以满足定时触发执行。相当于在第一种模型的外界加入协调器管理工作流按照规则进行执行。

图片3.png

3.Bundle

针对 coordinator 的批处理工作流。Bundle 将多个 Coordinator 管理起来,只需要一个 Bundle 提交即可。

图片4.png

每个调度都可以产生不同的类型但是可以通过 bundle 一个批次提交所有的快捷单,不需要每次手动去提交,如果没有概念,提供三个任务,需要单独提交三次或者写三次,因此这样就做了批处理工作流。最终在调度过程当中,无论是协调器还是其他都将依赖 work flow 始终是核心与重点。


三.总结

1.oozie 流程节点

oozie 核心配置是在一个 workf1ow.xml 文件文件中定义工作流的执行流程规则类型

(1)control node 控制工作流的执行路径:start end fork join kill

(2)action node 具体的任务类型:mr spark shell java hive(具体描述)

上述两种类型结合起来就可以描绘出一个工作流的 DAG(无关有向)图。

2.oozie 工作流类型

(1)Workflow 基本类型的工作流只会按照定义顺序执行无定时触发

(2)coordinator 定时触发任务当满足执行时间或者输入数据可用触发 workflow执行(协调者)

(3)bundle 批处理任务一次提交多个 coordinator 简化工作量,使用不多,不需要每次手动依次提交,可以在 bundle 中批处理提交。

此时完成工作流基本分类,基本核心是:work flow 中的 xml 编写,后续当中会使用较多。

相关文章
|
2月前
|
Shell
Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
【2月更文挑战第17天】Flume【问题记录 01】【at org.apache.flume.node.Application.main(Application.java:xxx) 类问题整理+其他类型问题总结】【避坑指南】
60 2
|
19天前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
32 1
|
2月前
|
存储 Apache 索引
一文彻底弄懂Apache Hudi不同表类型
一文彻底弄懂Apache Hudi不同表类型
44 1
|
2月前
|
SQL 分布式计算 API
Apache Hudi从零到一:深入研究读取流程和查询类型(二)
Apache Hudi从零到一:深入研究读取流程和查询类型(二)
55 1
|
7月前
|
存储 关系型数据库 MySQL
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
156 0
|
5月前
|
存储 Java 网络安全
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
ZooKeeper【部署 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
50 0
|
10月前
|
SQL 分布式计算 运维
Hadoop生态系统中的监控与管理工具:Apache Ambari和Apache Oozie的功能解析
Hadoop生态系统中的监控与管理工具:Apache Ambari和Apache Oozie的功能解析
|
11月前
|
存储 SQL 弹性计算
[2.0快速体验]Apache Doris 2.0 弹性计算节点快速体验
我们都知道Doris 目前是一个典型的Share-Nothing的架构,Doris 通过绑定数据和计算资源在同一个节点获得非常好的性能表现. 但随着Doris 计算引擎性能持续提高, 越来越多的用户也开始选择使用Doris直接查询数据湖数据. 这类场景是一种Share-Disk场景, 数据往往存储在远端的 HDFS/S3 上, 计算在 Doris 中, Doris 通过网络获取数据, 然后在内存完成计算. 而如果这两个负载都混合在同一个集群时, 对于目前 Doris 的架构就会出现以下不足: 资源隔离差, 两个负载对集群的响应要求不一, 混合部署会有相互的影响, 数据湖场景下磁盘利用率低:集
415 0
|
11月前
|
消息中间件 存储 Apache
Apache RocketMQ 的 Broker 节点
Apache RocketMQ 的 Broker 节点
164 0
|
12月前
|
Java Apache 容器
Apache ZooKeeper - 节点实操常用zookeeper命令
Apache ZooKeeper - 节点实操常用zookeeper命令
86 0

相关实验场景

更多

推荐镜像

更多