Oozie支持Java action ,Java action 会自动执行workflow任务中制定的java类中的 public static void main(String[] args)方法,会在hadoop集群上以单mapper task的形式执行一个map-reduce job.
workflow任务会等待当前java程序执行完继续执行下一个action,这意味着我们可以写多个action以此来调用多个类.当java类正确执行退出后,将会进入ok控制流;当发生异常时,将会进入error控制流。
Java action 由以下几个元素组成:
• job-tracker (required)
• name-node (required)
• prepare ---执行删除文件或者创建目录的操作
• configuration ---将里面配置的参数传递给任务
• main-class (required) ---指定执行的java类的全类名(包名.类名)
• java-opts ---提交给驱动程序的参数。
• arg ---提交给java应用的参数
• file ---添加额外所需jar包
• archive
• capture-output ----可以捕获输出
action语法规则如下:
...
[JOB-TRACKER]
[NAME-NODE]
...
...
[JOB-XML]
[PROPERTY-NAME]
[PROPERTY-VALUE]
...
[MAIN-CLASS]
[JAVA-STARTUP-OPTS]
ARGUMENT
...
[FILE-PATH]
...
[FILE-PATH]
...
...
若想调用java类有三个是必需的:1.workflow.xml(名字不可改) 2.job.properties(名字可改) 3.jar包
官网给出的例子:
...
foo:8021
bar:8020
mapred.queue.name
default
org.apache.oozie.MyFirstMainClass
-Dblah
argument1
argument2
...
我们工作时的例子:
1.workflow.xml---放到hdfs目录中
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
test1.OzzieTest1
${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
test1.OzzieTest1
Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
以下几点需要注意:
中的workflow如果设置成0.2那么就不会显示wofkflow的Graph视图,如下图所示:
2.job.properties---放在本地即可
nameNode=hdfs://hgdp-001:8020 -----hdfs地址
jobTracker=hgdp-001:8032 -----jobTracker地址queueName=default ------oozie队列hdfspath=user/root
examplesRoot=ocn-itv-oozie -----全局目录
oozie.use.system.libpath=True -----是否加载用户lib库(oozie的system share lib)
oozie.libpath=${nameNode}/${hdfspath}/${examplesRoot}/lib/ -----用户lib库地址(存放所需的jar包)oozie.wf.application.path=${nameNode}/${hdfspath}/${examplesRoot}/wf/wf4/ ----oozie工作流程workflow.xml所在hdfs中的地址
3.oozie运行:
启动任务:oozie job -config job.properties -run -oozie http://xxxx(地址):11000/oozie