[英]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.