Apache Oozie 教程:什么是 Oozie,工作流,示例 – Hadoop
什么是 OOZIE?
Apache Oozie 是 Hadoop 的工作流调度器。它是一个运行依赖作业工作流的系统。在这里,用户可以创建工作流的有向无环图,这些图可以在 Hadoop 中并行和顺序运行。
它包含两部分
-
工作流引擎:工作流引擎负责存储和运行由 Hadoop 作业组成的工作流,例如 MapReduce、Pig、Hive。
- 协调器引擎:它根据预定义的计划和数据的可用性运行工作流作业。
Oozie 具有可扩展性,可以管理 Hadoop 集群中数千个工作流(每个工作流包含数十个作业)的及时执行。
Oozie 也非常灵活。可以轻松启动、停止、暂停和重新运行作业。Oozie 可以轻松地重新运行失败的工作流。由于停机或故障而错过或失败的作业,可以很容易地追赶。甚至可以跳过特定的失败节点。
OOZIE 如何工作?
Oozie 在集群中作为服务运行,客户端提交工作流定义以立即或稍后处理。
Oozie 工作流包含操作节点和控制流节点。
操作节点代表一个工作流任务,例如将文件移动到 HDFS、运行 MapReduce、Pig 或Hive 作业、使用 Sqoop 导入数据或运行 Shell 脚本或用 Java 编写的程序。
控制流节点通过允许条件逻辑等构造来控制操作之间的工作流执行,其中可以根据早期操作节点的结果遵循不同的分支。
开始节点、结束节点和错误节点属于此类节点。
开始节点,表示工作流作业的开始。
结束节点,表示作业的结束。
错误节点表示发生错误并打印相应的错误消息。
在工作流执行结束时,Oozie 使用 HTTP 回调来向客户端更新工作流状态。进入或退出操作节点也可能触发回调。
示例工作流图
打包和部署 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 提供了在作业完成后发送电子邮件通知的机制。