Hadoop工作流调度系统Oozie

Oozie是一个管理hadoop任务的工作流/协调系统。Oozie工作流中拥有多个Action,如Hadoop Map/Reuce job,Hadoop Pig job等,所有的Action以有向无环图(DAG Direct Acyclic Graph)的模式部署运行。所以在Action的运行步骤上是有方向的,只能上一个Action运行完成后才能运行下一个Action。

oozie任务图

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的语法,比如可以定义开始(start),结束(end),失败(fail)节点.开始节点就表示从该节点开始运行.同时也提供一种机制去控制工作流的执行过程,如选择(decision),并行(fork),join节点。
  • Oozie工作流提供各种类型的Action用于支持不同的需要,如Hadoop Map/Reduce,Hadoop File System,Pig,SSH,HTTP,Email,Java,以及Oozie子流程.Oozie也支持自定义扩展以上各种类型的Action。
  • Oozie工作流允许自定义参数,如${inputDir}。

例如wordcount的例子:启动后执行”mapreduce wordcount”,如果成功执行end,如果失败执行kill。
其workflow.xml定义如下:

<workflow-app name='wordcount-wf' xmlns="uri:oozie:workflow:0.1">  
    <start to='wordcount'/>  
    <action name='wordcount'>  
        <map-reduce>  
            <job-tracker>${jobTracker}</job-tracker>  
            <name-node>${nameNode}</name-node>  
            <configuration>  
                <property>  
                    <name>mapred.mapper.class</name>  
                    <value>org.apache.WordCount.Map</value>  
                </property>  
                <property>  
                    <name>mapred.reducer.class</name>  
                    <value>org.apache.WordCount.Reduce</value>  
                </property>  
                <property>  
                    <name>mapred.input.dir</name>  
                    <value>${inputDir}</value>  
                </property>  
                <property>  
                    <name>mapred.output.dir</name>  
                    <value>${outputDir}</value>  
                </property>  
            </configuration>  
        </map-reduce>  
        <ok to='end'/>  
        <error to='end'/>  
    </action>  
    <kill name='kill'>  
        <message>Something went wrong: ${wf:errorCode('wordcount')}</message>  
    </kill/>  
    <end name='end'/>  
</workflow-app>

配置打包后通过OozieClient提交给Hadoop就直接可以运行了

任务种类

Oozie任务分为三种模式:

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

Shell Action

如果想通过Oozie调度远程服务器上的命令,可以通过ssh action来执行任意的shell命令。用户必须明确的上传所需要的第三方库。Oozie通过Hadoop的分布式缓冲来上传、打标签、使用。

Shell命令会在任意一个hadoop计算节点上运行,但是计算节点上默认安装的工具集可能会不一样。不过在所有的计算节点上,通常都装有大部分普通的unix工具。因此需要明确的很重要的一点是:Oozie只支持有被安装到计算节点上的命令或者通过分布式缓存上传的命令。也就是说,我们必须通过file上传我们要用到的文件。

参考:
http://www.infoq.com/cn/articles/introductionOozie
http://jyd.me/nosql/oozie-shell-action-config/

发表评论

电子邮件地址不会被公开。 必填项已用*标注