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

Oozie应用开发步骤

  1. 业务分析。

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

  2. 业务实现。

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

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

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

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

      请参见配置Oozie作业运行参数

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

      编号

      步骤

      描述

      1

      定义startaction

      请参见配置Oozie作业执行入口

      2

      定义MapReduceaction

      请参见配置Oozie MapReduce作业

      3

      定义FS action

      请参见配置Oozie作业操作HDFS文件

      4

      定义end action

      请参见配置Oozie作业执行终点

      5

      定义killaction

      请参见配置Oozie作业异常结束打印信息

      依赖或新开发的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定时调度作业

  3. 上传流程文件。

    1. 使用或切换到拥有HDFS上传权限的用户,准备用户可参见准备本地应用开发环境
    2. 使用该用户进行Kerberos认证。
    3. 使用HDFS上传命令,将“dataLoad”目录上传到HDFS某个指定目录(developuser用户需要对该目录有读写权限)。

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

  4. 执行流程文件。

    1. 登录客户端节点,使用developuser用户进行Kerberos认证。

      cd /opt/client

      source bigdata_env

      kinit developuser

    2. 启动流程。

      命令:

      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 -config job.properties -run