更新时间:2024-08-03 GMT+08:00

Oozie应用开发步骤

  1. 业务分析。

    1. 可以使用客户端样例目录中Mapreduce程序对日志目录的数据进行分析、处理。
    2. 将Mapreduce程序的分析结果移动到数据分析结果目录,并将数据文件的权限设置成660
    3. 为了满足每天分析一次的需求,需要每天重复执行一次1.a1.b

  2. 业务实现。

    1. 登录客户端所在节点,新建“dataLoad”目录,作为程序运行目录,后面编写的文件均保存在该目录下。例如“/opt/client/Oozie/oozie-client-*/examples/apps/dataLoad/”

      可以直接复制样例目录中“map-reduce”文件夹内的内容到“dataLoad”文件夹,然后进行编辑。

      目录中 “oozie-client-*”涉及的版本号以实际版本号为准。

    2. 编写流程任务属性文件(job.properties)。

      请参见job.properties

    3. 编写Workflow任务:“workflow.xml”
      表1 流程Action

      编号

      步骤

      描述

      1

      定义startaction

      请参见Start Action

      2

      定义MapReduceaction

      请参见MapReduce Action

      3

      定义FS action

      请参见FS Action

      4

      定义end action

      请参见End Action

      5

      定义killaction

      请参见Kill Action

      依赖或新开发的jar包需要放在“dataLoad/lib”目录下。

      流程文件样例:

      <workflow-app xmlns="uri:oozie:workflow:1.0" name="data_load"> 
         <start to="mr-dataLoad"/> 
         <action name="mr-dataLoad"> 
             <map-reduce><resource-manager>${resourceManager}</resource-manager>  
                  <name-node>${nameNode}</name-node> 
                  <prepare> 
                      <delete path="${nameNode}/user/${wf:user()}/${dataLoadRoot}/output-data/map-reduce"/> 
                  </prepare> 
                  <configuration> 
                      <property> 
                          <name>mapred.job.queue.name</name> 
                          <value>${queueName}</value> 
                      </property> 
                      <property> 
                          <name>mapred.mapper.class</name> 
                          <value>org.apache.oozie.example.SampleMapper</value> 
                      </property> 
                      <property> 
                          <name>mapred.reducer.class</name> 
                          <value>org.apache.oozie.example.SampleReducer</value> 
                      </property> 
                      <property> 
                          <name>mapred.map.tasks</name> 
                          <value>1</value> 
                      </property> 
                      <property> 
                          <name>mapred.input.dir</name> 
                          <value>/user/oozie/${dataLoadRoot}/input-data/text</value> 
                      </property> 
                      <property> 
                          <name>mapred.output.dir</name> 
                          <value>/user/${wf:user()}/${dataLoadRoot}/output-data/map-reduce</value> 
                      </property> 
                  </configuration> 
              </map-reduce> 
              <ok to="copyData"/> 
              <error to="fail"/> 
          </action> 
       
          <action name="copyData"> 
               <fs> 
                   <delete path='${nameNode}/user/oozie/${dataLoadRoot}/result'/> 
                   <move source='${nameNode}/user/${wf:user()}/${dataLoadRoot}/output-data/map-reduce'  
                         target='${nameNode}/user/oozie/${dataLoadRoot}/result'/> 
                   <chmod path='${nameNode}/user/oozie/${dataLoadRoot}/result' permissions='-rwxrw-rw-' dir-files='true'></chmod> 
              </fs> 
              <ok to="end"/> 
              <error to="fail"/> 
          </action> 
       
          <kill name="fail"> 
              <message>This workflow failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message> 
          </kill> 
          <end name="end"/> 
      </workflow-app> 
    4. 编写Coordinator任务:“coordinator.xml”

      完成每天一次的定时数据分析工作,请参见coordinator.xml

  3. 上传流程文件。

    1. 使用或切换到拥有HDFS上传权限的用户。
    2. 使用HDFS上传命令,将“dataLoad”目录上传到HDFS某个指定目录(oozie_cli用户需要对该目录有读写权限)。

      该指定目录需要与之前“job.properties”中定义的“oozie.coord.application.path”属性和“workflowAppUri”属性的值保持一致。

  4. 执行流程文件

    命令:

    oozie job -oozie https://oozie server hostname:port/oozie -config job.properties文件所在路径 -run

    参数列表:

    表2 参数列表

    参数

    含义

    job

    表示执行的是job任务

    -oozie

    oozie服务器地址(任意节点)

    -config

    job.properties文件所在路径

    -run

    表示启动流程

    例如:

    oozie job -oozie https://10-1-130-10:21003/oozie -configjob.properties -run