0
是否可以動態調度Oozie工作流程?也就是說,要通過Java API而不是配置文件來指定參數?通過Java API安排Oozie工作流程
例如,我希望能夠在每天晚上10點安排工作流程執行,但要通過Web界面指定該時間,因爲它可能會更改。怎麼做?
是否可以動態調度Oozie工作流程?也就是說,要通過Java API而不是配置文件來指定參數?通過Java API安排Oozie工作流程
例如,我希望能夠在每天晚上10點安排工作流程執行,但要通過Web界面指定該時間,因爲它可能會更改。怎麼做?
嗨,你可以使用以下命令:
public class Oozie {
public static void main(String[] args) {
OozieClient wc = new OozieClient("http://oozieserver:11000/oozie");
Properties conf = wc.createConfiguration();
conf.setProperty("nameNode", "hdfs://namenode:8020");
conf.setProperty("jobTracker", "resourcemanager:8032");
conf.setProperty("queueName", "default");
conf.setProperty("oozie.libpath", "${nameNode}/user/oozie/share/lib");
conf.setProperty("oozie.use.system.libpath", "true");
conf.setProperty("oozie.wf.rerun.failnodes", "true");
conf.setProperty("oozieProjectRoot",
"${nameNode}/user/bijoy/oozieProject");
conf.setProperty("appPath",
"${oozieProjectRoot}/workflowJavaMainAction");
conf.setProperty(OozieClient.APP_PATH, "${appPath}");
conf.setProperty("inputDir", "${oozieProjectRoot}/data/*/*/*/*/*");
conf.setProperty("outputDir", "${appPath}/output");
try {
String jobId = wc.run(conf);
System.out.println("Workflow job, " + jobId + " submitted");
while (wc.getJobInfo(jobId).getStatus() == WorkflowJob.Status.RUNNING) {
System.out.println("Workflow job running ...");
Thread.sleep(10 * 1000);
}
System.out.println("Workflow job completed ...");
System.out.println(wc.getJobInfo(jobId));
} catch (Exception r) {
System.out.println("Errors " + r.getLocalizedMessage());
}
}
}
我真的不理解你做什麼。您是否想使用外部調度程序來提交Oozie工作流程(直接或通過一次性協調程序)?或者您是否想要重置正在運行的Oozie協調器的調度規則(例如,由於Dailight Saving Times與Oozie UTC crontab混淆)? –
我的系統有用戶可以指定應該在什麼時候通過Web界面運行作業。他們不知道Oozie,也不知道下面的Hadoop。因此,他們應該能夠登錄到系統並在X時間每天說「做這件事」。我想用Oozie做到這一點。這是可能的,以及如何做到這一點? – Marko
嗯,是的,提交一個協調器與類似crontab的調度。但要小心UTC時間轉換,特別是如果您的國家使用DST。如果用戶改變了他/她的想法,殺死協調員並用新的調度規則重新創建它。 –