使用hue+oozi构建任务调度系统

oozie调度系统调研

1. 关于oozie的简单说明

  1. oozie应用程序目录结构说明:

    一个完整的oozie应用程序一般情况下至少包含三个文件及目录:job.properties、workflow.xml、lib(lib表示为用来存放程序运行需要的jar包,非必需)

  2. flow nodes的六种类型:

    start, end, decision, fork, join, kill

  3. action-node的部分类型:

    Hadoop map-reduce, Hadoop file system, Pig, SSH, HTTP, eMail and Oozie sub-workflow,
    Oozie可以自定义扩展任务类型。

2. Oozie简介

  • WorkFlow:工作流,控制工作流的开始和结束过程,以及工作流Job的执行路径,并提供一种机制来控制工作流执行路径(比如:Decision、Fork以及Join节点等)

  • Coordinator:调度器,多个WorkFlow可以组成一个Coordinator,可以把前几个WorkFlow的输出作为后一个WorkFlow的输入,当然也可以定义WorkFlow的触发条件,来做定时触发.

  • Bundle:控制一个或多个Coordinator应用

3. 一个标准的工作流的示例

工作流实例图

hPDL流程的定义:

<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.myorg.WordCount.Map</value>
            </property>
            <property>
                <name>mapred.reducer.class</name>
                <value>org.myorg.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>

4.在hue中创建一个workflow。

在hue中可以通过拖拽的方式进行workflow.xml的编辑:

ozzie任务的编辑方式

hue的任务管理页面:
ozzie的任务管理页面

hue编辑的workflow.xml保存在hdf上的/user/oozie/workspaces/目录下:
/user/oozie/workspaces/hue-oozie-1476263861.83

[fuxin.zhao@db-hadoop-client02 ~]$ hadoop fs -ls /user/oozie/workspaces/hue-oozie-1476263861.83
Found 3 items
-rw-r--r--   3 hue hadoop        114 2016-10-12 17:33 /user/oozie/workspaces/hue-oozie-1476263861.83/job.properties
drwxr-xr-x   - hue hadoop          0 2016-10-12 17:17 /user/oozie/workspaces/hue-oozie-1476263861.83/lib
-rw-r--r--   3 hue hadoop       1277 2016-10-12 17:33 /user/oozie/workspaces/hue-oozie-1476263861.83/workflow.xml

自动生成的workflow文件内容如下:workflow的大体流程已经自动生成了,自己可以根据需要进行修改。

<workflow-app name="job-test-workflow" xmlns="uri:oozie:workflow:0.5">
<start to="shell-f60d"/>
<kill name="Kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-f60d">
    <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <exec>/user/hue/aa.sh</exec>
          <argument>args1</argument>
          <argument>args2</argument>
          <argument>args2</argument>
        <file>/user/hue/avro-1.7.4.jar#avro-1.7.4.jar</file>
          <capture-output/>
    </shell>
    <ok to="shell-dfe8"/>
    <error to="Kill"/>
</action>
<action name="shell-dfe8">
    <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <exec>/user/hue/aa.sh</exec>
          <capture-output/>
    </shell>
    <ok to="kill-ece6"/>
    <error to="Kill"/>
</action>
<kill name="kill-ece6">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="End"/>
</workflow-app>

5.提交oozie命令

1 .提交oozie任务
oozie job -oozie http://localhost:11000/oozie/ -config /root/tvreport-workflow/tvreport-daily-wf/job.properties  -run
2 .提交kill 任务
oozie job -oozie http://localhost:11000/oozie -kill 0031861-140812111151262-oozie-root-W

3.查看job的日志信息
bin/oozie job -oozie http://hadoop-1:11000/oozie -log 0000001-160702224410648-oozie-beif-W

》》》未完待续。

原文地址:https://www.cnblogs.com/honeybee/p/5954064.html