简体   繁体   English

如何与Oozie协调员延迟工作流操作

[英]how to delay workflow action with oozie coordinator

I have one oozie coordinator and workflow jobs, when my one of workflow action's completed , i need to start next action after some time lets say 50 minutes. 我有一个oozie协调员和工作流作业,当我的工作流动作之一完成时,我需要一段时间(例如50分钟)后开始下一个动作。 Can i configure that from oozie workflow or oozie coordinator to wait for some time to execute next action(depended on previous action and some async task started by previous) . 我可以从oozie工作流或oozie协调器配置它以等待一段时间来执行下一个动作(取决于上一个动作和上一个动作所启动的一些异步任务)。

coordinator xml 协调器XML

<coordinator-app name="ods-ds-cms-coordinator" start="${startTime}" end="${endTime}"
                 frequency="${coord:days(1)}" timezone="${timeZone}" xmlns="uri:oozie:coordinator:0.5">
    <action>
        <workflow>
            <app-path>${exampleDir}/ods-ds-cms-workflow.workflow</app-path>
            <configuration>
                <property>
                    <name>nameNode</name>
                    <value>${nameNode}</value>
                </property>
                <property>
                    <name>jobTracker</name>
                    <value>${jobTracker}</value>
                </property>
                <property>
                    <name>exampleDir</name>
                    <value>${nameNode}/custom/oozie</value>
                </property>
            </configuration>
        </workflow>
    </action>
</coordinator-app>

workflow.xml 工作流程

<?xml version="1.0" encoding="UTF-8"?>

<workflow-app xmlns="uri:oozie:workflow:0.5" name="ods-ds-cms-workflow.workflow">
  <global>
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <configuration>
      <property>
        <name>mapred.job.queue.name</name>
        <value>${queue}</value>
      </property>
    </configuration>
  </global>
  <start to="cms-checker"/>
  <action name="cms-checker">
    <java>
      <main-class>com.insense.helper.CMSPullChecker</main-class>
      <arg>${cmsChecker}</arg>
      <arg>${cmsType}</arg>
      <capture-output/>
    </java>
    <ok to="trigger_next_job"/>
    <error to="kill"/>
  </action>
  <action name="trigger_next_job"> // need to start this after some time
    <sub-workflow>
      <app-path>${exampleDir}/ods-ds-bank.workflow</app-path>
      <propagate-configuration/>
    </sub-workflow>
  <ok to="end"/>
  <error to="kill"/>
  </action>

How can i archive that with oozie framwork, I can do this using java action with Thread.sleep(50*60*1000), is better way to do with oozie ? 我如何使用oozieframwork存档,我可以通过Thread.sleep(50 * 60 * 1000)使用java action来做到这一点,这是使用oozie的更好方法?

You can create another workflow with only one job - Shell job. 您可以仅使用一个作业-Shell作业创建另一个工作流。 Then you should create shell script with one command: 然后,您应该使用一个命令创建shell脚本:

sleep 50m

When one workflow will be completed, you should execute this workflow with sleep command. 一个工作流程完成后,您应该使用sleep命令执行此工作流程。 Next workflow will start after 50 minutes. 下一个工作流程将在50分钟后开始。

Example. 例。

workflow.xml 工作流程

<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5">
<start to="shell-3322"/>
<kill name="Kill">
    <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<action name="shell-3322">
    <shell xmlns="uri:oozie:shell-action:0.1">
        <job-tracker>${jobTracker}</job-tracker>
        <name-node>${nameNode}</name-node>
        <exec>sleep.sh</exec>
        <file>sleep.sh#sleep.sh</file>
          <capture-output/>
    </shell>
    <ok to="End"/>
    <error to="Kill"/>
</action>
<end name="End"/>

sleep.sh sleep.sh

sleep 50m

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM