Apache Oozie是一个用于执行和管理Hadoop分布式任务的工作流调度器。它支持MapReduce、Sqoop、Pig和Hive作业的轻松调度,并允许多个复杂任务的顺序执行以完成更大的任务。此外,还可以设置作业序列,以便多个作业可以同时运行。Oozie通过启动工作流指导Hadoop执行引擎来执行它们。现有的Hadoop基础设施可以被Oozie用于负载均衡和故障转移等。Oozie分为两个部分:
Hadoop作业,如MapReduce和Pig,被用于工作流引擎中存储和运行工作流。预定义的时间表和数据可用性被协调引擎用来执行工作流作业。Oozie使用回调和轮询来识别作业完成。一旦Oozie作业启动,就会分配一个唯一的URL,并在工作完成时通知。如果回调URL没有被调用,Oozie可以轮询作业以查看它是否已完成。
Apache Oozie工作流中包含控制流节点和操作节点。
操作节点是触发计算活动执行的触发器。Oozie为多种Hadoop活动提供了开箱即用的支持,包括HadoopMapReduce、Hadoop文件系统、Pig等。此外,Oozie还提供了对系统特定任务的支持,如SSH、HTTP和电子邮件。
控制流节点是告诉工作流从哪里开始和结束(开始、结束、失败)的东西。控制流节点还提供了控制工作流执行路径的方法(决策、分叉和合并)。
以下控制流节点在Apache Oozie过程中启动或终止工作流执行:
开始节点是Oozie工作流作业切换的初始节点,也是工作流作业的入口点。Apache Oozie中的每个工作流定义都必须包含一个开始节点。
结束节点是Oozie工作流作业移动的最终节点,它表示工作流作业已成功完成。当工作流作业到达结束节点时,它成功完成,其状态更新为成功的。Apache Oozie中的每个工作流定义都必须包含一个结束节点。
Kill节点允许工作流作业自行终止。当工作流作业到达Kill节点时,它会以错误终止,其状态变为已杀死。
以下是Apache Oozie的关键特性:
Oozie具有客户端API和命令行界面,Java应用程序可以使用它们来启动、管理和监控任务。
使用其Web服务API,可以从任何地方管理作业。
Oozie提供了执行定期计划运行的作业的能力。
Oozie能够在任务完成后发送电子邮件提醒。
Oozie工作流中包含的重要EL功能有:
wf: name() - 此函数用于返回工作流应用程序的名称。
wf: id() - 此函数返回当前工作流作业的作业ID。
wf:errorCode (String node) - 此函数返回当前执行的动作节点的错误代码。
wf:lastErrorNod() - 此函数返回最近完成的动作节点的名称。
Apache Oozie工作流提供的几种控制流节点,它们指导工作流执行:
决策控制节点 - 像switch-case语句一样,决策控制节点允许工作流选择采取哪条执行路径。
分叉和合并控制节点 - 分叉和合并控制节点成对使用,分叉节点将单个执行路径分成多个并发执行路径。合并节点等待来自相应分叉节点的所有并发执行路径的到来。
Oozie支持的操作节点类型包括:
MapReduce操作
Java操作
Pig操作
FS操作
子工作流操作
Hive操作
DistCp操作
电子邮件操作
Shell操作
SSH操作
Sqoop操作
Apache Oozie提供多种任务管理方式。客户希望计划后续执行的作业类型或需要特定执行顺序的活动,都可以使用Apache Oozie来简化。使用Apache Oozie,管理员或用户可以并行执行多个独立进程,顺序运行作业,或从任何地方控制它们,使其成为一个宝贵的工具。
Oozie协调器作业是由时间和数据可用性触发的定期Oozie工作流作业。此外,Oozie协调器可以监督多个依赖于未来工作流结果的过程。一个过程的结果成为下一个工作流的输入。这个序列被称为“数据应用程序管道”。
Oozie在定义的时区(通常为UTC,不使用夏令时)处理协调器作业;这个时区被称为“Oozie处理时区”。Oozie处理时区决定了协调器任务的开始/结束时间,作业暂停时间,以及数据集的初始实例。此外,每个协调器数据集实例URI模板都在Oozie处理时区内解析为DateTime。
Oozie协调器的使用通常分为三个不同的类别:
小型:一个协调器应用程序,包括嵌入式数据集定义。
中型:由一个通用数据集描述和几个协调器应用程序组成。
大型:由许多标准数据集定义和多个协调器应用程序组成。
Apache Oozie工作流支持并帮助计算任务的操作节点列表如下:
MapReduce操作:此操作节点在Hadoop中启动Map-Reduce作业。
Pig操作:此节点从Apache Oozie启动Pig进程。
FS操作(HDFS):此操作节点促进Oozie进程管理与HDFS相关的所有文件和目录。它还支持mkdir、moves、chmod、delete、chgrp和touchz命令。
Java操作:在Oozie工作流中,子工作流操作节点有助于执行主Java类中的public static void main(String[] args)函数。
Oozie默认使用Derby数据库来存储作业ID和作业状态。
Apache Oozie工作流作业经历以下状态:
PREP:准备是Oozie工作流作业的基本先决条件。在此状态下,工作流作业已定义但尚未进行。
RUNNING:当Oozie工作流进行时,它进入运行状态。在工作流处于运行状态时,它不会达到其结束状态,以错误结束,或被暂时暂停。
SUSPENDED:当Oozie工作流作业不再活跃时,它们会移动到暂停状态。一旦停止,工作流将保持这种状态,直到被重新启动或终止。
SUCCEEDED:当运行的Oozie作业到达结束节点时,它变为成功状态。
KILLED:当管理员终止运行中、已创建或暂停的工作流作业时,作业变为已杀死状态。
FAILED:如果工作流作业在执行过程中因意外错误而失败,运行中的Oozie作业变为失败状态。
Oozie Bundle是Oozie的更高层次抽象,它批量处理一组协调器应用程序。用户可以在捆绑级别启动/停止/暂停/恢复/重新运行,从而实现更简洁有效的操作控制。特别是,Oozie Bundle系统使用户能够设计和执行一组协调器应用程序,有时被描述为知识管道。在捆绑中,协调器应用程序之间没有显式依赖关系。然而,用户可以使用协调器应用程序的信息依赖性来创建隐式的数据应用程序管道。
Oozie的工作流和Apache Oozie工作流提供的多个节点。
Oozie工作流中的EL功能。
Apache Oozie的特性和用途。
Apache Oozie执行的各种操作等。