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