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
运行结果如下图所示: