我试图每1分钟重复一次java动作,最多重试6次。 我试过下面的代码。
**Workflow.xml**
<workflow-app name="FilePoller" xmlns="uri:oozie:workflow:0.4">
<start to="FilePoller"/>
<action name="FilePoller" retry-max="10" retry-interval="1">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>com.test.Utils</main-class>
<arg>${input1}</arg>
<arg>${inputDir}</arg>
<archive>lib/filepollingscheduler.jar#filepollingscheduler.jar</archive>
</java>
<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>
**Java code snippet:**
Pattern pattern = Pattern.compile(inputFilePattern);
Matcher matcher = pattern.matcher(path.getName());
if (matcher.find()) {
System.out.println("Matches found");
System.exit(0);
} else {
System.out.println("No matches found");
System.exit(1);
}
如果未找到匹配项,我想重试该操作。
感谢任何帮助。
答案 0 :(得分:1)
通常,System.exit()会导致操作失败,即使它是0。
http://archive.cloudera.com/cdh4/cdh/4/oozie/WorkflowFunctionalSpec.html#a3.2.7_Java_Action
你应该在发现匹配时让main()完成或抛出异常。
public static void main(...) {
...
if(!matcher.find())
throw new MatchNotFoundException();
return;
}
答案 1 :(得分:0)
我相信捕获输出和决策节点对您来说是一个有用的选择。你可以尝试一下。我的工作类似于此,但并不完全符合您的要求。
一旦工作流程执行,我们应该将输出捕获为{true或false},关于是否找到匹配项。根据结果,可以决定是再次执行工作流还是应该停止。