Oozie

  1. 介绍

    在Hadoop中执行的任务有时候需要把多个Map/Reduce作业连接到一起,这样才能够达到目的。在Hadoop生态圈中,有一种相对比较新的组件叫做Oozie,它可以把多个Map/Reduce作业组合到一个逻辑工作单元中,从而完成更大型的任务。

    Oozie实际上是服务于hadoop生态系统的工作流调度工具。

    Oozie工作流程定义是一个DAG(Directed Acyclical Graphs)图,它由控制流节点(Control Flow Nodes)或动作节点(Action Nodes)组成,各个节点又是通过表征转移的箭线互相连通。控制节点用于控制工作流的计算流程,动作节点用于封装计算单元。

  2. 目的

    使用Oozie的主要目的是为了管理不同类型的作业在Hadoop系统中处理。

    作业之间的依赖关系是由用户向无环图的形式指定。Oozie 的消耗信息以及在工作流中指定负责其执行的顺序正确。这样,用户同时管理保存整个工作流程。此外 Oozie 有指定执行特定工作频率规定。

  3. Oozie工作流

    在oozie里面,工作流就是一组操作的集合,他们之前包含了前后依赖的关系,比如hadoop,pig等等。工作流里面可以包含fork和join的节点,用于把任务水平拆分成多个,并行执行,然后再合并到一起。

    Oozie 工作流由动作节点和控制流的节点组成。一个工作流的定义包含了 流控制节点(比如start,end,decision,fork,join,kill)以及action节点(比如map-reduce,spark,sqoop,java,shell等),节点直接都是通过有向箭头相连。

    在oozie中,工作流的状态可以是:

    PREP RUNNING SUSPENDED SUCCEEDED KILLED FAILED

    当任务失败时,oozie会通过参数控制进行重试,或者直接退出。

  4. 控制流节点(Control Flow Nodes)
    start

    start节点是工作流的入口,workflow第一个action就需要是start。当工作流启动后,会自动寻找start节点执行。每个工作流都需要有一个start节点。

    end

    end节点是工作流执行成功的最后一个节点,当到达end节点后,工作流的状态会变成SUCCEEDED.如果有多个action指向了end,那么当第一个action执行后就会直接跳转到end节点,虽然后面的action都没有执行,但是workflow也认为是成功执行了。

    kill

    kill节点允许工作流自动停止,当工作流执行到kill时,工作流的状态将会被认为是KILLED。如果有一个或者多个节点指向了kill,那么工作流都会被停止。一个workflow可以声明零个或者多个节点。

    其中name属性是kill节点的名称,message指定了工作流退出的原因。

    decision

    decision节点支持给工作流提供选择,有点类似switch-case的语法。它使用JSP表达式语法,来进行条件判断。

    fork和join

    fork节点把任务切分成多个并行任务,join则合并多个并行任务。fork和join节点必须是成对出现的。join节点合并的任务,必须是通一个fork出来的子任务才行。

  5. 动作节点(Action Nodes)

    工作流程定义中,能够触发一个计算任务(Computation Task)或者处理任务(Processing Task)执行的节点。所有的动作(Action)都有一些基本的特性

    • 远程执行

      对Oozie来说,动作节点的执行都是远程的,因为Oozie可能部署在一个单独的服务器上,而工作流Job是在Hadoop集群的节点上执行的。即使Oozie在Hadoop集群的某个节点上,它也是处于与Hadoop进行独立无关的JVM示例之中(Oozie部署在Servlet容器当中)。

    • 异步性

      动作节点的执行,对于Oozie来说是异步的。Oozie启动一个工作流Job,这个工作流Job便开始执行。Oozie可以通过两种方式来探测工作流Job的执行情况:一种是基于回调机制,对每个任务的执行(可以看成是动作节点的执行)都对应一个唯一的URL,如果任务执行结束或者执行失败,会通过回调这个URL通知Oozie已经完成;另一种就是轮询,Oozie不停地去查询任务执行的完成状态,如果由于网络故障回调机制失败,也会使用轮询的方式来处理。

      执行结果要么成功,要么失败

      如果动作节点执行成功,则会转向ok节点;如果失败则会转向error节点。

    • 可恢复性

      如果一个动作节点执行失败,Oozie提供了一些恢复执行的策略,这个要根据失败的特点来进行:如果是状态转移过程中失败,Oozie会根据指定的重试时间间隔去重新执行;如果不是转移性质的失败,则只能通过手工干预来进行恢复;如果重试恢复执行都没有解决问题,则最终会跳转到error节点。

    下面详细介绍Oozie内置支持的动作节点类型,如下所示:

    Map-Reduce动作

    map-reduce动作会在工作流Job中启动一个MapReduce Job任务运行,我们可以详细配置这个MapReduce Job。另外,可以通过map-reduce元素的子元素来配置一些其他的任务,如streaming、pipes、file、archive等等。

    Hive动作

    Hive主要是基于类似SQL的HQL语言的,它能够方便地操作HDFS中数据,实现对海量数据的分析工作。

    Sqoop动作

    Sqoop是一个能够在Hadoop和结构化存储系统之间进行数据的导入导出的工具。

    Pig动作

    pig动作可以启动运行pig脚本实现的Job。

    Fs动作

    Fs动作主要是基于HDFS的一些基本操作,如删除路径、创建路径、移动文件、设置文件全乡等等。

    Java动作

    Java动作,是执行一个具有main入口方法的应用程序,在Oozie工作流定义中,会作为一个MapReduce Job执行,这个Job只有一个Map任务。我们需要指定NameNode、JobTracker的信息,还有配置一个Java应用程序的JVM选项参数(java-opts),以及传给主函数(arg)。

    Sub-workflow动作

    Sub-workflow动作是一个子流程的动作,主流程执行过程中,遇到子流程节点执行时,会一直等待子流程节点执行完成后,才能继续跳转到下一个要执行的节点。

  6. oozie通过两种方式来检查任务是否完成。

    • 回调:当一个任务和一个计算被启动后,会为任务提供一个回调url,该任务执行完成后,会执行回调来通知oozie

    • 轮询:在任务执行回调失败的情况下,无论任何原因,都支持以轮询的方式进行查询。

    oozie提供这两种方式来控制任务。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值