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 提供在作业完成后发送电子邮件通知的功能。