Apache Oozie 工作流调度系统详解

在大数据时代,对海量数据集进行可扩展和分布式的计算变得越来越重要。Apache Oozie是一个开源的工作流调度系统,专为在分布式环境中运行和管理Hadoop作业而设计。本文将深入探讨Oozie的基本概念、类型、特性、工作原理以及如何在Hadoop环境中部署和运行工作流应用。

Apache Oozie 简介

Apache Oozie是一个工作流调度系统,用于在分布式环境中执行和管理Hadoop作业。它允许多个复杂的作业按顺序处理,以完成更大的作业。在作业序列中,两个或更多的任务也可以被编程为同时运行。Oozie 是一个开源的Java Web应用程序,遵循Apache 2.0许可协议。它负责启动工作流操作,然后由Hadoop处理引擎进行处理。

因此,Oozie可以利用现有的Hadoop基础设施进行负载均衡、故障转移等。它可以快速调度MapReduce、Sqoop、Pig或Hive任务。使用Apache Oozie,可以轻松集成多种不同类型的作业,并快速建立所需的作业管道。

Oozie作业类型

Oozie工作流作业:Apache Oozie工作流是一组动作和控制节点,它们以有向无环图(DAG)的形式组织。DAG捕获了控制依赖关系,每个动作代表一个Hadoop作业、Pig、Hive、Sqoop或Hadoop DistCp作业。除了Hadoop任务外,还有其他操作,如Java应用程序、shell脚本和电子邮件通知。

Oozie协调器作业:为了解决基于触发器的工作流计算,使用Apache Oozie协调器。它提供了一个基础,用于提供触发器或预测,然后根据这些设定的触发器调度工作流。它允许管理员根据组条件和应用特定的约束来监控和控制工作流过程。

Oozie Bundle:它是一组Oozie协调器应用程序,指导何时启动该协调器。用户可以在捆绑级别启动、停止、恢复、暂停和重新运行,从而完全控制。捆绑也使用基于XML的语言定义,称为捆绑规范语言。在许多大型企业中,这是一个非常有用的抽象层次。

Oozie的特点

Oozie的Web服务API可以从任何地方控制作业。它包含一个客户端API和一个命令行界面,可以从Java应用程序中使用,以启动、控制和监控作业。它提供了执行定期运行的作业的能力。它还有在作业完成后发送电子邮件提醒的能力。

Oozie的工作原理

Oozie是一个在Hadoop群集和客户端计算机上运行的服务。它发送工作流定义,用于立即或延迟处理。工作流主要由动作和控制流节点组成。动作节点代表一个工作流作业,如将文件传输到HDFS、运行MapReduce、Pig或Hive作业、使用Sqoop导入数据或处理一个shell脚本或Java程序。控制流节点通过允许条件逻辑来管理动作之间的工作流处理,允许根据前一个动作节点的结果遵循替代分支。

这组节点包括开始节点、结束节点和错误节点。开始节点表示工作流作业的开始。结束节点表示作业的结束。错误节点表示存在错误和要写入的关联错误消息。它在工作流过程结束时使用HTTP回调来通知客户端工作流状态。回调可能是由于进入或退出动作节点引起的。

工作流描述和每个相关资源,如Pig脚本、MapReduce Jar文件等,构成了工作流应用。工作流应用必须遵循一个简单的目录结构部署到HDFS,以便它可以访问它。

目录结构如下:

/   lib/     hadoop-application-examples.jar   workflow.xml

Workflow.xml(工作流定义文件)必须保存在顶级目录(父目录)。包含MapReduce类的Jar文件可以在Lib目录下找到。可以使用任何构建工具,如Ant或Maven,来创建遵循此模式的工作流应用。

将文件复制到HDFS的命令:

% hadoop fs -put hadoop-examples/target/ name of workflow

运行Oozie工作流作业:

要运行作业,需要使用Oozie命令行工具,这是一个重要的客户端程序,与Oozie服务器通信。

步骤1:导出OOZIE URL环境变量,以定义Oozie命令,设置用于处理的Oozie服务器。

% export OOZIE_URL="http://localhost:11000/oozie"

步骤2:使用-config选项运行Oozie工作流作业,它指的是一个本地Java属性文件。该文件包括工作流XML文件中使用的参数定义。

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

步骤3:oozie.wf.application.path。它通知Oozie工作流应用在HDFS中的位置。

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

步骤4:可以使用子命令‘job’和‘-info’选项来确定工作流作业的状态,需要在‘-info’后面给出作业ID,如下所示。根据作业状态,将显示RUNNING、KILLED或SUCCEED。

% oozie job -info

步骤5:要获得成功工作流计算的结果,必须运行以下Hadoop命令。

% hadoop fs -cat

学习了如何部署工作流应用并运行工作流应用。它使用Hadoop处理引擎启动工作过程操作以执行多个任务。它使用现代Hadoop硬件进行负载均衡、故障转移等。Oozie负责通过回调和轮询确定任务的完成。文章的见解:

使用Apache Oozie在分布式环境中调度Hadoop作业。

工作流引擎存储和运行Hadoop工作流,如MapReduce、Pig等。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485