Apache Oozie 教程:什么是工作流、示例 - Hadoop

OOZIE 是什么?

Apache Oozie 是 Hadoop 的工作流调度程序。它是一个运行依赖作业的工作流的系统。在这里,用户可以创建 有向无环图 工作流可以在 Hadoop 中并行和顺序运行。

它由两部分组成:

  • 工作流引擎:工作流引擎的职责是存储和运行由 Hadoop 作业(例如 MapReduce、Pig、Hive)组成的工作流。
  • 协调引擎:它根据预定义的时间表和数据可用性运行工作流作业。

Oozie 具有可扩展性,可以管理 Hadoop 集群中数千个工作流(每个工作流由数十个作业组成)的及时执行。

欧齐

Oozie 也非常灵活。可以轻松启动、停止、暂停和重新运行作业。Oozie 使重新运行失败的工作流变得非常容易。很容易理解,由于停机或故障而错过或失败的作业是多么困难。甚至可以跳过特定的失败节点。

OOZIE 如何工作?

Oozie 作为集群中的服务运行,客户端提交工作流定义以供立即或稍后处理。

Oozie 工作流包括 动作节点控制流节点.

An 动作节点 表示工作流任务,例如,将文件移动到 HDFS、运行 MapReduce、Pig 或 蜂房 作业,使用 Sqoop 导入数据或运行用 Java.

A 控制流节点 通过允许条件逻辑之类的构造来控制操作之间的工作流执行,其中可以根据先前操作节点的结果遵循不同的分支。

起始节点, 结束节点汽车保险理赔及 错误节点 属于此类别的节点。

启动节点, 指定工作流作业的开始。

结束节点, 表示工作结束。

错误节点 指定发生错误并打印相应的错误消息。

在工作流执行结束时,Oozie 使用 HTTP 回调来向客户端更新工作流状态。进入或退出操作节点也可能触发回调。

工作流程图示例

工作流程图示例

打包并部署 Oozie 工作流应用程序

工作流应用程序由工作流定义和所有相关资源(如 MapReduce Jar 文件、Pig 脚本等)组成。应用程序需要遵循简单的目录结构,并部署到 高密度文件系统 以便 Oozie 可以访问它们。

示例目录结构如下所示-

<name of workflow>/</name>
??? lib/
? ??? hadoop-examples.jar
??? workflow.xml

必须将workflow.xml(工作流定义文件)保存在顶层目录(具有工作流名称的父目录)中。Lib目录包含包含MapReduce类的Jar文件。符合此布局的工作流应用程序可以使用任何构建工具(例如Ant或Maven)构建。

需要使用命令将此类构建复制到 HDFS,例如 -

% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow

运行 Oozie 工作流作业的步骤

在本节中,我们将了解如何运行工作流作业。要运行此作业,我们将使用 Oozie 命令行工具(与 Oozie 服务器通信的客户端程序)。

1. 导出 OOZIE_URL 环境变量,该变量告诉 oozie 命令使用哪个 Oozie 服务器(这里我们使用本地运行的服务器):

% export OOZIE_URL="http://localhost:11000/oozie"

2. 使用以下方式运行工作流作业:

% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run

-config 选项指的是本地 Java properties 文件包含工作流 XML 文件中参数的定义,以及 oozie.wf.application.path,它告诉 Oozie 工作流应用程序在 HDFS 中的位置。

属性文件的示例内容:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>

3. 获取工作流作业的状态

可以使用带有“-info”选项的子命令“job”并在“-info”后指定作业 ID 来查看工作流作业的状态。

e.g., % oozie job -info <job id>

输出显示状态为 RUNNING、KILLED 或 SUCCEEDED 之一。

4.可以使用 Hadoop 命令查看工作流成功执行的结果,例如:

% hadoop fs -cat <location of result>

为什么要使用 Oozie?

使用 Oozie 的主要目的是管理 Hadoop 系统中正在处理的不同类型的作业。

用户以有向无环图的形式指定作业之间的依赖关系。Oozie 会利用这些信息并按照工作流中指定的正确顺序执行作业。这样,用户就可以节省管理完整工作流的时间。此外,Oozie 还可以指定特定作业的执行频率。

Oozie 的功能

  • Oozie 具有客户端 API 和命令行界面,可用于启动、控制和监视作业 Java 应用程序。
  • 使用其 Web 服务 API,人们可以从任何地方控制作业。
  • Oozie 可以执行定期安排运行的作业。
  • Oozie 提供在作业完成后发送电子邮件通知的功能。