Oozie java动作重试选项

时间:2014-09-14 01:53:39

标签: java oozie

我试图每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);
            }

如果未找到匹配项,我想重试该操作。

感谢任何帮助。

2 个答案:

答案 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},关于是否找到匹配项。根据结果​​,可以决定是再次执行工作流还是应该停止。