oozie调用java实例------shell action

Oozie提供了一个方便的方式来运行任何命令。这可能是Unix命令,Perl或Python脚本,甚至java程序都可以通过Unix shell调用。shell命令运行在任意的Hadoop集群节点上,并且运行在结点上的命令必须保证可在本地可用。

本地提交: 

  格式:java   -cp   全类名(包名.类名)   -jar   jar包名字

  实例如下:

     java -cp test1.OzzieTest1 -jar test.jar          

    运行结果:

shell action 语法:

<workflow-app name="[WF-DEF-NAME]" xmlns="uri:oozie:workflow:0.3">
    ...
    <action name="[NODE-NAME]">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>[JOB-TRACKER]</job-tracker>
            <name-node>[NAME-NODE]</name-node>
            <prepare>
               <delete path="[PATH]"/>
               ...
               <mkdir path="[PATH]"/>
               ...
            </prepare>
            <job-xml>[SHELL SETTINGS FILE]</job-xml>
            <configuration>
                <property>
                    <name>[PROPERTY-NAME]</name>
                    <value>[PROPERTY-VALUE]</value>
                </property>
                ...
            </configuration>
            <exec>[SHELL-COMMAND]</exec>
            <argument>[ARG-VALUE]</argument>
                ...
            <argument>[ARG-VALUE]</argument>
            <env-var>[VAR1=VALUE1]</env-var>
               ...
            <env-var>[VARN=VALUEN]</env-var>
            <file>[FILE-PATH]</file>
            ...
            <archive>[FILE-PATH]</archive>
            ...
            <capture-output/>
        </shell>
        <ok to="[NODE-NAME]"/>
        <error to="[NODE-NAME]"/>
    </action>
    ...
</workflow-app>

 

shell action的组成元素如下所示:

   • job-tracker (required)

  • name-node (required)

  • prepare     ---执行删除文件或者创建目录的操作

  • job-xml     ---指定一个存在的配置文件

  • configuration  ---将里面配置的参数传递给任务

  • exec (required)  ---要执行的shell命令

  • argument  ---元素指定要传递给shell脚本的参数

  • env-var  ---传递给shell命令的环境变量

  • file  

  • archive

  • capture-outpu    ---可以捕获输出

若想调用java类有三个是必需的:1.workflow.xml(名字不可改)  2.job.properties(名字可改)  3.jar包

示例如下:

1.workflow.xml---放到hdfs目录中

<workflow-app name="workflow-java-shell" xmlns="uri:oozie:workflow:0.5">
    <start to="java-4f48"/>
    <action name="java-4f48">
        <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>java</exec>
            <argument>-cp</argument>
            <argument>test1.OzzieTest1</argument>
            <argument>-jar</argument>
            <argument>test.jar</argument>
        </shell>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
   <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>   
  <end name="End"/>
</workflow-app>

2. job.properties  ---放本地即可

nameNode=hdfs://hgdp-001:8020
jobTracker=hgdp-001:8032
queueName=default
hdfspath=user/root
examplesRoot=ocn-itv-oozie
oozie.use.system.libpath=True
oozie.libpath=${nameNode}/${hdfspath}/${examplesRoot}/lib/
oozie.wf.application.path=${nameNode}/${hdfspath}/${examplesRoot}/wf/wf5/

 

3.oozie运行:

  启动任务:oozie job -config job.properties -run -oozie http://xxxx(地址):11000/oozie

 

运行结果如下图所示:

 

posted on 2017-08-30 16:57  风景1573  阅读(822)  评论(0编辑  收藏  举报