Oozie的input-events和done-flag使用

需求场景:使用Oozie时 coordinator job间的执行顺序控制

但随着业务的扩充,新加了一些 coordinator job,也都是放在凌晨的时候去执行,但有的job依赖于早先存在的 coordinator job,所以不同的coordinator job间执行顺序是有规则的。比较笨的方法是直接将新的job的时间设置为远后于其依赖job时间之后,以保证依赖的job已经执行完。但这种方法很弱,要是能监控到依赖的job执行完后自动执行新job岂不是更智能化!

处理方案:使用Oozie的input-events和done-flag 配置实现

首先看 Oozie 的 coordinator.xml 配置文件

<coordinator-app name="test_job" frequency="${coord:days(1)}" start="${job_start}" end="${job_end}"
	timezone="GMT+08:00" xmlns="uri:oozie:coordinator:0.2">
	<controls>
		<concurrency>1</concurrency>
	</controls>
        <datasets>
		<dataset name="input_data" frequency="${coord:days(1)}"
			initial-instance="${job_start}" timezone="GMT+08:00">
			<uri-template>${monitor_workflow_run_status_path}</uri-template>
			<done-flag></done-flag>
		</dataset>
	</datasets>	
	<input-events>
		<data-in name="input" dataset="input_data">
			<instance>${coord:current(0)}</instance>
		</data-in>
	</input-events>	
	<action>
        <workflow>
            <app-path>${application_path}</app-path>
            <configuration>
                <property>
                    <name>nominalformateDate</name>
                    <value>${coord:formatTime(coord:nominalTime(), "yyyyMMdd")}</value>					
                </property>
		<property>
                    <name>user_name</name>
                    <value>${coord:user()}</value>					
                </property> 
		<property>
                    <name>nominal_date</name>
                    <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), "yyyy-MM-dd")}</value>
                </property>              
            </configuration>
        </workflow>
    </action>
</coordinator-app>
当某个coordinator job 开始执行时,oozie会首先检查所有的input-events是否都已满足条件,主要检查以下内容: uri-template

1、uri-template 指定路径的文件或文件夹是否已经存在;

2、done-flag 指定的文件是否存在。

只有当input-events满足了设置的条件时,工作流才会切换到runing状态,否则将一直处于wait状态,并时刻监视指定的文件或文件夹,一但input-events满足了,工作流会立即进入running状态。

done-flag 的设置一般有三种情况:

1、直接不设置 done-flag 标签,如下:

<dataset name="input_data" frequency="${coord:days(1)}"	initial-instance="${job_start}" timezone="GMT+08:00">
	<uri-template>${monitor_workflow_run_status_path}</uri-template>			
</dataset>
oozie 将默认 done-flag 为 '_SUCCESS',所以需要满足  uri-template 指定路径的文件夹下存在 _SUCCESS 文件 ,job才触发执行。

2、设置done-flag 标签,但值为空,如下:

<dataset name="input_data" frequency="${coord:days(1)}"	initial-instance="${job_start}" timezone="GMT+08:00">
	<uri-template>${monitor_workflow_run_status_path}</uri-template>
	<done-flag></done-flag>
</dataset>
oozie 则直接检测   uri-template 指定路径的文件或文件夹是否存在,只要存在就直接触发 job执行。

3、设置done-flag 标签,值不为空,如下:

<dataset name="input_data" frequency="${coord:days(1)}"	initial-instance="${job_start}" timezone="GMT+08:00">
	<uri-template>${monitor_workflow_run_status_path}</uri-template>
	<done-flag>trigger.dat</done-flag>
</dataset>
oozie 则直接检测   uri-template 指定路径的文件夹下是否存在 done-flag指定的文件如本例的   trigger.dat  文件,只要存在就触发 job执行。


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值