写点什么

Oozie 平台调度

发布于: 2021 年 04 月 18 日
Oozie平台调度

利用 shell 脚本通过 crontab 进行定时执行,这样实现的话比较简单,但是随着多个 job 复杂度的提升,无论是协调工作还是任务监控都变得麻烦,我们选择使用 oozie 来对工作流进行调度监控。

1. Oozie 的特点

§ Oozie 是管理 hadoop 作业的调度系统

§ Oozie 的工作流作业是一系列动作的有向无环图(DAG)

§ Oozie 协调作业是通过时间(频率)和有效数据触发当前的 Oozie 工作流程

§ Oozie 支持各种 hadoop 作业,例如:java map-reduce、Streaming map-reduce、pig、hive、sqoop 和 distcp 等等,也支持系统特定的作业,例如 java 程序和 shell 脚本。

§ Oozie 是一个可伸缩,可靠和可拓展的系统

2. 对比选型

在没有工作流调度系统之前,公司里面的任务都是通过 crontab 来定义的,时间长了后会发现很多问题:

 

 

于是,出现了一些管理 crontab 任务的调度系统,如 CronHub、CronWeb 等。

而在大数据领域,现在市面上常用的工作流调度工具有 Oozie, Azkaban,Cascading,Hamake 等,

 

我们往往把 Oozie 和 Azkaban 来做对比:

两者在功能方面大致相同,只是 Oozie 底层在提交 Hadoop Spark 作业是通过 org.apache.hadoop 的封装好的接口进行提交,而 Azkaban 可以直接操作 shell 语句。在安全性上可能 Oozie 会比较好。

 

工作流定义:Oozie 是通过 xml 定义的而 Azkaban 为 properties 来定义。

部署过程:Oozie 的部署相对困难些,同时它是从 Yarn 上拉任务日志。

任务检测:Azkaban 中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是 BUG,但是 Oozie 能有效的检测任务的成功与失败。

操作工作流:Azkaban 使用 Web 操作。Oozie 支持 Web,RestApi,Java API 操作。

权限控制:Oozie 基本无权限控制,Azkaban 有较完善的权限控制,供用户对工作流读写执行操作。

运行环境:Oozie 的 action 主要运行在 hadoop 中而 Azkaban 的 actions 运行在 Azkaban 的服务器中。

记录 workflow 的状态:Azkaban 将正在执行的 workflow 状态保存在内存中,Oozie 将其保存在 Mysql 中。

出现失败的情况:Azkaban 会丢失所有的工作流,但是 Oozie 可以在继续失败的工作流运行

3. 主要概念

我们在官网介绍中就注意到了,Oozie 主要有三个主要概念,分别是 workflow,coordinator,bundle。

其中:

Workflow:工作流,由我们需要处理的每个工作组成,进行需求的流式处理。Coordinator:协调器,可以理解为工作流的协调器,可以将多个工作流协调成一个工作流来进行处理。

Bundle:捆,束。将一堆的 coordinator 进行汇总处理。

 

简单来说,workflow 是对要进行的顺序化工作的抽象,coordinator 是对要进行的顺序化的 workflow 的抽象,bundle 是对一堆 coordiantor 的抽象。层级关系层层包裹。

Oozie 本质是通过 launcher job 运行某个具体的 Action。launcher job 是一个 MR 作业,而且并不知道它将在集群的哪台机器上执行这个 MR 作业。

4. Job 组成

一个 oozie 的 job 一般由以下文件组成:

job.properties:记录了 job 的属性

workflow.xml:使用 hPDL 定义任务的流程和分支

lib 目录:用来执行具体的任务

发布于: 2021 年 04 月 18 日阅读数: 13
用户头像

还未添加个人签名 2021.03.07 加入

还未添加个人简介

评论

发布
暂无评论
Oozie平台调度