Apache Oozie 教程:什么是 Oozie,工作流,示例 – Hadoop

什么是 OOZIE?

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

它包含两部分

  • 工作流引擎:工作流引擎负责存储和运行由 Hadoop 作业组成的工作流,例如 MapReduce、Pig、Hive。
  • 协调器引擎:它根据预定义的计划和数据的可用性运行工作流作业。

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

OOZIE

Oozie 也非常灵活。可以轻松启动、停止、暂停和重新运行作业。Oozie 可以轻松地重新运行失败的工作流。由于停机或故障而错过或失败的作业,可以很容易地追赶。甚至可以跳过特定的失败节点。

OOZIE 如何工作?

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

Oozie 工作流包含操作节点控制流节点

操作节点代表一个工作流任务,例如将文件移动到 HDFS、运行 MapReduce、Pig 或Hive 作业、使用 Sqoop 导入数据或运行 Shell 脚本或用 Java 编写的程序。

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

开始节点结束节点错误节点属于此类节点。

开始节点,表示工作流作业的开始。

结束节点,表示作业的结束。

错误节点表示发生错误并打印相应的错误消息。

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

示例工作流图

Example Workflow Diagram

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

工作流应用程序包括工作流定义和所有关联的资源,例如 MapReduce Jar 文件、Pig 脚本等。应用程序需要遵循简单的目录结构,并部署到HDFS,以便 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="https://:11000/oozie"

2. 使用以下命令运行工作流作业-

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

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

属性文件的示例内容

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

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

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

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

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

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

% hadoop fs -cat <location of result>

为什么使用 Oozie?

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

作业之间的依赖关系由用户以有向无环图的形式指定。Oozie 消耗此信息并按工作流中指定的正确顺序处理它们的执行。这样就节省了用户管理完整工作流的时间。此外,Oozie 还提供了指定特定作业执行频率的机制。

Oozie 的特性

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