目录
代码编写
大数据平台:CDH
pom.xml
<dependency>
<groupId>org.apache.oozie</groupId>
<artifactId>oozie-client</artifactId>
<version>4.1.0</version>
</dependency>
code:
import java.util.Properties;
import org.apache.oozie.client.OozieClient;
import org.apache.oozie.client.WorkflowJob.Status;
public class Oozie {
private static final String IP = "127.0.0.1";
public static void main(String[] args) {
OozieClient wc = new OozieClient("http://" + IP + ":11000/oozie");
Properties conf = wc.createConfiguration();
// oozie任务参数,这些参数可以到hue页面获取
conf.setProperty("nameNode", "hdfs://" + IP + ":8020");
conf.setProperty("oozie.wf.application.path", "hdfs://" + IP + ":8020/user/hue/oozie/workspaces/hue-oozie-1591867016.16");
conf.setProperty("jobTracker", IP + ":8032");
conf.setProperty("mapreduce.job.user.name", "hue");
conf.setProperty("user.name", "hue");
// 没有用,不需要
// conf.setProperty("hue-id-w", "391");
conf.setProperty("oozie.use.system.libpath", "true");
conf.setProperty("dryrun", "false");
// 脚本参数<选填> 自己在写好的Action里有参数设置,需在这里传递
conf.setProperty("param1", "p1");
conf.setProperty("param2", "p2");
try {
String jobId = wc.run(conf);
// Status的枚举值:PREP, RUNNING, SUCCEEDED, KILLED, FAILED, SUSPENDED
while (Status.RUNNING == wc.getJobInfo(jobId).getStatus()) {
System.out.println("RUNNING...");
Thread.sleep(5000);
}
final Status status = wc.getJobInfo(jobId).getStatus();
System.out.println(status);
} catch (Exception e) {
e.printStackTrace();
}
}
}
HUE页面获取目标调用的Oozie任务参数,需满足以下要求
1. Oozie任务本身文件是存在的,
(1)Oozie任务是手动新建上去的,点击Create,自己配置上去的,这种没有问题
(2)Oozie任务是通过import json文件导入的,这种Oozie任务不好使,需要手动构建,移步到最后,有讲解。但是如果该任务只是作为本地任务流中的一份子,无需构建,保证该任务自己可正常运行即可。
2. 任务需执行一次,只要点击执行,立马kill掉即可,可以帮助生成所需参数,对应拷贝即可
点击执行后,成功与否,会在Dashboard下生成记录,选择目标工作流,点击进入
进入到工作流,点击Configuration,将对应值填写到代码Oozie参数即可
(单个ACTION工作流)
(多个ACTION工作流,图中最下面的两个参数是任务参数,但是已经在workflow.xml中替换过了,无需配置,Definition可验证)
点击Definition,查找除Oozie参数外的脚本参数可以,在代码中配置相应value即可
参数传递
shell等ACTION的参数按顺序配置value即可。
当ACTION为Sub Workflow时,而Sub Workflow本身也有参数时,就涉及到当前父工作流向子工作流传递参数,方法:通过添加PROPERTIES属性,其中name为Sub Workflow中配置的脚本参数名,value值可随便定义,最终在代码中添加的脚本参数要以value值为准,而不是name配置的。
错误解决
运行报错,如下:
NameNode [127.0.0.1:8020] not allowed, not in Oozie's whitelist. Allowed values are: [localhost:8020]
JobTracker [127.0.0.1:8032] not allowed, not in Oozie's whitelist. Allowed values are: [localhost:8032]
在CM页面添加白名单,配置域名和IP两种,用逗号隔开:
任务修复
针对import json文件,手动构建方法,其实就是创建目录,选择上传的workflow,点进去,选择Settings(版本不同位置不同)
复制workspace的值
默认在/user/hue/oozie/workspaces上新建上面的文件夹
在新建的文件夹下新建 lib 文件夹,如果原始lib有文件,也相应拷贝进去即可。job.properties和workflow.xml不用新建,我是执行过一次,所以有。即使删除掉,下次执行,会自动创建。
多说一句,Oozie的任务其实有两种,本地任务或者说每次执行参数都不会变的任务,都在workspaces下,像那种import 的外来任务,每次也能正常执行,但是参数会变,都在deployments下。
本地任务与外来任务的参数对比。