美文网首页
Oozie:工作流调度框架

Oozie:工作流调度框架

作者: chengruru | 来源:发表于2018-08-15 23:53 被阅读0次

    一、为什么需要Oozie?

           一项工作可能需要多个hadoop作业(job)来协作完成,而一个job的输出可能作为另一个job的输入,此时就涉及到了数据流的处理。

           我们不可能就盯着程序,等它运行完再去运行下一个程序。所以,一般的做法就是通过shell来做,但是如果涉及到的工作流很复杂(比方说有1,2,3,4四个作业,1的输出作为2 3 4的输入,然后2 3的结果运算之后再和1的结果进行某种运算……最后再输出)是很费时费力的。这里就需要用到Oozie——一个能把多个MR作业组合为一个逻辑工作单元(一个工作流),从而自动完成任务调用的工具。
           Note:Oozie本质就是一个作业协调工具(底层原理是通过将xml语言转换成mapreduce程序来做,但只是在集中map端做处理,避免shuffle的过程)

    二、 Oozie是什么?

    Oozie是用于 Hadoop 平台的开源的工作流调度引擎。
       是用来管理Hadoop作业。
       是属于web应用程序,由Oozie client和Oozie Server两个组件构成。
    Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。
           简单的说Oozie是一个工作流引擎。只不过它是一个基于Hadoop的工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个action,然后把他们串在一个工作流里面就可以自动执行了,对于大数据的分析工作非常有用。

    三、 Hadoop目前已经存在的调度框架

    框架一:Crontab

           Crontab是针对每个用户而言的,被用来提交和管理用户需要周期性执行的任务。
    语法:

    crontab(选项)(参数)
    ###1.选项
    -e:编辑该用户的计时器设置;
    -l:列出该用户的计时器设置;
    -r:删除该用户的计时器设置;
    -u<用户名称>:指定要设定计时器的用户名称。
    
    ###2.参数
    crontab文件:指定包含待执行任务的crontab文件。
    

    小例子:

    例子:每隔一分钟,将当前时间写到一个日志文件里
    ###  1. 为当前hadoop用户添加一个任务
    $ crontab -e
    ## 添加我们的第一条命令
    */1 * * * *  /bin/date >> /home/hadoop/datas/hadoop-date.log
    

    针对hadoop任务作业调度如下所示:

    * maprecude
          /opt/cloudera/hadoop/bin/yarn jar xxx.jar input output
    * hive
          /opt/cloudera/hive/bin/hive -f hive-select-bflog.sql
    * sqoop
          /opt/cloudera/sqoop/bin/sqoop --options-file sqoop-inp.txt
    * shell
          /bin/sh xxx.sh
                  *hive
                  *sqoop
    
    框架二:Azkaban

           Azkaban是开源的工作流管理器,有管理界面,一般功能都可以满足,但功能有限。
    官网网址:https://azkaban.github.io

    框架三:Oozie

           Oozie尤其适合于做数据仓库ETL的公司使用,如电商公司。
    官网网址:http://oozie.apache.org/

    框架四:Zeus

           Zeus是阿里开源的Hadoop平台管理工具,相较于Crontab增加了监控界面。
    官网网址:https://github.com/michael8335/zeus2

    四、 Oozie的功能架构

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

    五、Oozie的三大版本

           oozie v1是基于workflow的;
           oozie v2是基于coodinator的;
           oozie v3是基于bundle的。

    未完,待续!

    相关文章

      网友评论

          本文标题:Oozie:工作流调度框架

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