Oozie学习(基本任务)

一、oozie组件

  • Workflow:工作流(流程图)
    • 常用结点:
      • 控制流结点(Control Flow Nodes)
        • start、end、kill、分支、合并等
      • 动作结点(Action Nodes)
  • Coordinator:定时器
  • Bundle Job:绑定多个Coordinator

二、环境搭建

三、Oozie shell的编写及启动:

  • 工作流程
    • 编写job.propertiesworkflow.xml
    • 将文件上传到Haoop的HDFS中
    • 通过命令执行oozie任务
    • 查看oozie的执行页面:http://hh:11000/oozie/

文件编写:

  • job.poperties配置:
    • 指定NameNode(HDFS)和JobTracker(Yarn)
    • 指定workflow在HDFS中的路径
nameNode=hdfs://hh:8020     # hdfs地址
jobTracker=hh:8032          # yarn地址
queueName=default           
examplesRoot=shell

oozie.wf.application.path=${nameNode}/oozie/workflows/example/oozie-example/apps/${examplesRoot}/                    # workflow上传到HDFS后的地址
  • workflow.xml配置(官方例子):
    • 注意下面配置中,xmlns版本与oozie-site.xml的版本需要一致,否则会报无法识别的错误
<workflow-app xmlns="uri:oozie:workflow:0.3" name="shell-wf">
    <start to="shell-node"/>
    <action name="shell-node">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <exec>echo</exec>
            <argument>my_output=Hello Oozie</argument>
            <capture-output/>
        </shell>
        <ok to="check-output"/>
        <error to="fail"/>
    </action>
    <decision name="check-output">
        <switch>
            <case to="end">
                ${wf:actionData('shell-node')['my_output'] eq 'Hello Oozie'}
            </case>
            <default to="fail-output"/>
        </switch>
    </decision>
    <kill name="fail">
        <message>Shell action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <kill name="fail-output">
        <message>Incorrect output, expected [Hello Oozie] but was [${wf:actionData('shell-node')['my_output']}]</message>
    </kill>
    <end name="end"/>
</workflow-app>

文件上传

  • hadoop dfs -put /home/hadoop/oozie-example/apps/shell/* /oozie/workflows/example/oozie-example/apps/shell

image

执行作业

  • oozie job -oozie http://hh:11000/oozie -config job.properties -run
    • 其中job.properties为本地的文件,而不是HDFS上的

查看作业

  • Oozie访问页面:http://hh:11000/oozie/ image
  • Yarn访问页面:http://172.20.13.20:8088/cluster image