Oozie

作者: _Levi__ | 来源:发表于2019-08-20 00:16 被阅读0次

    为什么要有Oozie?

    在数据业务场景,对于数据的处理往往是分阶段处理,而不同的阶段可能采用了不同的技术框架去完成这个业务需求,且可能在不同的阶段要干不同的事。

    炒饭(锅) à 吃饭(碗) à 筷子(动手)

    要吃饭就要等炒饭先用锅炒好,要用筷子动手吃饭就要等碗里装了饭,这是一个流水线式的过程,如果用设定时间的方式,到了什么时候就拿完去装饭,但如果今天兼职的人特别多,那么炒的饭必然就多了,时间也长了,但是设定时间到了,还没炒好,可是有一堆人挤在厨房喊要饭,问题就出现了。

    于是有的人会想,如果有一个监督人帮我去这个监控、通知、控制好整个流程,那样多好啊,厨房就不会给天天催了,也不会发生拥挤的情况。

          小结:一个完整的数据分析系统通常是由大量的任务单元组成,Shell脚本、Java程序、MapReduce程序、Hive脚本等等,各个任务单元之间存在时间先后及前后依赖关系。

          为了很好的组织这样的复杂执行计划,需要一个工作流调度系统来调用执行。

          简单的工作流调度:Liunx的crontab来定义

          复杂的工作流调度:Oozie、Azakaban等。。。

    主流几款工作流调度框架

    特性HamakeOozieAzkabanCascading

    工作流描述语言XMLXML (xPDL based)text file with key/value  pairsJava API

    依赖机制data-drivenexplicitexplicitexplicit

    是否要web容器NoYesYesNo

    进度跟踪console/log messagesweb pageweb pageJava API

    Hadoop job调度支持noyesyesyes

    运行模式command line utilitydaemondaemonAPI

    Pig支持yesyesyesyes

    事件通知nononoyes

    需要安装noyesyesno

    支持的hadoop版本0.18+0.20+currently unknown0.18+

    重试支持noworkflownode  evelyesyes

    运行任意命令yesyesyesyes

    Amazon EMR支持yesnocurrently unknownyes

    什么是Oozie?

          Oozie(驯象人)是一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache的,用在一个工作流内以一个特定顺序运行一组工作或流程。

          Oozie在集群中扮演的是定时调度任务,多任务,并开源按照业务逻辑顺序调度。

    组成

    Workflow顺序执行流程节点,执行分支多节点或合并多分点为一个分支。

    Coordinator定时触发Workflow

    BundleJob绑定多个Coordinator

    Oozie节点

          控制流节点(Control Flow Nodes):一般都是定义在工作流开始或结束,比如start、end、kill等,以及提供工作流的执行路径。

          动作节点(Action Nodes):执行具体动作的节点。

    案例

    job.properties

    #NameNode地址

    nameNode=hdfs://hadoop-senior00-levi.com:8082

    #ResourceManager地址,默认端口8032

    jobTracker=hadoop-senior00-levi.com:8032

    #内部的Event队列名称

    queueName=default

    examplesRoot=oozie-apps

    #程序位置

    oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/shell

    #执行这个脚本

    EXEC1=test1.sh

    EXEC2=test2.sh

    workflow.xml

       

       

                   

                           ${jobTracker}

                           ${nameNode}

                           

                                   

                                           mapred.job.queue.name

                                           ${queueName}

                            ${EXEC1}

                           /user/admin/oozie-apps/shell/${EXEC1}#${EXEC1}

                           

                   

                   

                 

                   

                           ${jobTracker}

                           ${nameNode}

                           

                                   

                                           mapred.job.queue.name

                                           ${queueName}

                            ${EXEC2}

                           /user/admin/oozie-apps/shell/${EXEC2}#${EXEC2}

                           

                   

                   

       

           

               

                   ${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}

               

       

           Shell action failed, errormessage[${wf:errorMessage(wf:lastErrorNode())}]

       

           Incorrect output, expected [Hello Oozie] but was[${wf:actionData('shell-node')['my_output']}]

       

    test1.sh

    #!/bin/bash

    /usr/bin/date > /tmp/test.log

    /usr/bin/date > /tmp/test.log

    执行:

    上传到HDFS:

    hdfs dfs -rmr /user/levi/oozie-apps

    hdfs dfs -put oozie-apps/ /user/levi

    执行任务:

    bin/oozie job --ooziehttp://hadoop-senior00-levi.com:11000/oozie -config oozie-apps/shell/job.properties-run

    使用注意事项

    [if !supportLists]1.    [endif]启动不了,则到oozie-server/temp查看是否有*.pid文件,有就删除后在启动。

    [if !supportLists]2.    [endif]如果无法关闭oozie则kill掉。

    [if !supportLists]3.    [endif]Mysql配置如果没有生效的话,默认使用derby数据库

    [if !supportLists]4.    [endif]在本地修改完成的job配置,必须重新上传到HDFS。

    [if !supportLists]5.    [endif]Linux用户名和Hadoop的用户名不一致。

    [if !supportLists]6.    [endif]时区

    相关文章

      网友评论

          本文标题:Oozie

          本文链接:https://www.haomeiwen.com/subject/hakysctx.html