Oozie入门笔记

概述

Apache官网:https://oozie.apache.org/
Oozie文档:http://blog.cloudera.com/blog/category/oozie/

Oozie是一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,它能够提供对MR和Pig Jobs的任务调度与协调,需要部署到Java Servlet容器中运行。

工作流,即是指数据import进HDFS,用hive分析,然后将分析结果集export,把不同的结果集合并成最终结果,将不同的业务进行编排。Oozie的工作流任务是DAG(有向无环图)。
调度,即是指对作业或任务的定时执行,或者是事件的触发执行。触发执行的时机:在指定时间触发执行,或者当某目录下有数据集时触发执行。
Oozie集成Hadoop的很多框架,如Java MR、Streaming MR、Pig、Hive、Sqoop、Distcp。一个Oozie Job也是一个MR程序,仅仅只有map任务的程序,是分布式可扩展的。针对不同类型的任务编写的workflow,可以写成模板来直接套用。
Oozie同JBoss jBPM提供的jPDL一样,也提供类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般都会有很多不同功能的节点,比如分支、并发、汇合等。Oozie定义控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision、fork、join等;而动作节点包括Hadoop MR、Hadoop文件系统、Pig、SSH、HTTP、eMail和Oozie子流程。

在Hadoop中执行的任务,有时需要把多个MR作业连接到一起。Oozie,可以把多个MR作业组合到一个逻辑工作单元中,从而完成更大型的任务。

Oozie是服务于Hadoop生态系统的工作流调度工具,job运行平台是区别于其他调度工具的最大的不同。
作为调度系统两大核心:依赖和触发。依赖可以是条件依赖,比如,资源依赖,依赖于某些数据文件的存在,也可以是任务依赖,比如依赖于另一个job的完成。在Oozie里,每一个job对应一个action节点,这个节点可以是java,Hadoop FS,mapred,hive,sqoop,OS shell等等。job之间的依赖通过动作节点完成,fork,join等。触发主要指时间触发。依赖和触发在动作的方向上是相互的,依赖是必要条件,而触发是充分条件。

调度系统本身不会去执行具体的job,而是将job相关的所有资源发送到真实的执行环境,比如Hadoop JobTracker,hive client,关系型数据库系统等等,自己仅仅记录并监视job的执行状态,并对其状态的变化作出相应的动作,比如,job失败可以重新运行,job成功转到下一个节点。发送job的过程是一个非阻塞的行为,个别例外(比如hadoop fs操作)。
调度系统本身可以是任意程序,例如,linux上的一个脚本程序发起的精灵进程,一个web 工程,也可以是个GUI的软件工具。

Oozie作为一个调度引擎,不同于Hadoop的JobTracker实现的调度器。Oozie负责任务的调度分发,是指从提交作业的本地,将资源发送到job运行环境,比如Hadoop集群。分发行为发生在Hadoop集群外。JobTracker是将Hadoop作业拆分成若干个MR Job,分派给JobTracker去执行。分发行为发生在Hadoop集群内,是应用程序本身的功能,它可以自己选择job执行的先后顺序,或停止一个正在执行的job,让出资源给另一个job,控制更为精细。

Oozie工作流

  • Oozie工作流通过HPDL(一种通过XML自定义处理的语言,类似JBOSS JBPM的JPDL)来构造
  • Oozie工作流中的Action在运程系统运行如(Hadoop,Pig服务器上)。一旦Action完成,远程服务器将回调Oozie的接口并通知Action已经完成,这时Oozie又会以同样的方式执行工作流中的下一个Action,直到工作流中所有Action都完成(完成包括失败)。
  • Oozie工作流中包含可控制的工作流节点(control flow node)和Action节点(action node)
  • Control flow node其实可以理解为Oozie的语法,比如可以定义开始,结束,失败节点。开始节点就表示从该节点开始运行。同时也提供一种机制去控制工作流的执行过程,如选择(decision),并行(fork),join节点
  • Oozie工作流提供各种类型的Action用于支持不同的需要,如Hadoop MR,Hadoop File System,Pig,SSH,HTTP,Email,Java及Oozie子流程,也支持自定义扩展以上各种类型的Action
  • Oozie工作流允许自定义参数,如${inputDir}
  • 例如wordcount的例子:启动后执行mapreduce wordcount,如果成功执行end,如果失败执行kill。配置打包后通过OozieClient提交给Hadoop就直接可以运行

如果想通过Oozie调度远程服务器上的命令,可以通过ssh action来执行任意的shell命令。用户必须明确的上传所需要的第三方库。Oozie通过Hadoop的分布式缓冲来上传、打标签、使用。Shell命令会在任意一个hadoop计算节点上运行,但是计算节点上默认安装的工具集可能会不一样。不过在所有的计算节点上,通常都装有大部分普通的unix工具。Oozie只支持有被安装到计算节点上的命令或者通过分布式缓存上传的命令。也就是说,必须通过file上传要用到的文件。

Oozie任务分为三种模式:

  • workflow:oozie v1,最简单,定义DAG来执行
  • coordinator:oozie v2,构建在workflow工作方式之上,提供定时运行和触发运行任务的功能
  • bundle:oozie v3,bundle的作用就是将多个coordinator管理起来。这样只需要提供一个bundle提交即可。然后可以start、stop、suspend、resume任何coordinator。

概念

任务状态

状态含义说明
PREP一个Job第一次创建将处于PREP状态,表示工作流Job已经定义,但是没有运行
RUNNING当一个已经被创建的Job开始执行,就处于RUNNING状态。它不会达到结束状态,只能因为出错而结束,或被挂起
SUSPENDEDRUNNING状态的Job会变成SUSPENDED状态,且会一直处于该状态,除非这个Job被重新开始执行或被杀死
SUCCEEDED当一个RUNNING状态的Job到达end节点,就变成SUCCEEDED最终完成状态
KILLED当一个Job处于被创建后的状态,或者处于RUNNING、SUSPENDED状态时,被杀死,则Job的状态变为KILLED状态
FAILED当一个Job不可预期的错误失败而终止,就会变成FAILED状态

架构

Oozie Server架构
在这里插入图片描述
Oozie Server 组件
在这里插入图片描述
Oozie Coordinator
在这里插入图片描述
Oozie Bundle
在这里插入图片描述
任务本身是一个有向无环图(DAG)
在这里插入图片描述

安装

实例

管理Web界面

http://ip:11000/oozie/

参考

Oozie任务调度框架详解及使用简介(一)

posted @ 2021-06-24 21:33  johnny233  阅读(32)  评论(0编辑  收藏  举报  来源