工作流引擎Oozie(二):coordinator
1. 简介
coordinator是workflow的定时提交器,基于时间条件与数据生成触发(based on time and data triggers)。简单点说,coordinator按所定义的时间周期进行轮询,若数据生成条件满足,则触发workflow任务;否则,则等待数据生成或跳过(调度策略由设置的超时时间决定)。
2. 详解
coordinator-app
<coordinator-app name="coord-demo" frequency="${coord:days(1)}" start="${start_time}" end="${end_time}"
timezone="Asia/Shanghai" xmlns="uri:oozie:coordinator:0.1">
文件头定义了coordinator任务的名称,执行频率(frequency),开始与起止时间(start、end)。${coord:days(1)}为coordinator内置的EL function (Expression Language),表示为执行周期为一天。frequency的时间单位为分钟,则${coord:days(1)}=1440,${coord:hours(3)}=180. 一般地,在job.properties定义如:start_time=2016-06-07T00:00Z,应以UTC时区为准。
Control information
<controls>
<!--超时时间,若为0,一旦数据生成超时则coordinator action被丢弃;
若为-1,则一直等待数据生成;
若 > 0,即为超时时间(单位:分钟)-->
<timeout>-1</timeout>
<!--并发action数-->
<concurrency>1</concurrency>
<!--同时被触发的多个coordinator job的执行次序-->
<execution>${execution_order}</execution>
</controls>
datasets
<datasets>
<!--数据生成目录-->
<dataset name="data" frequency="${coord:hours(1)}" initial-instance="${start_time}" timezone="${timezone}">
<uri-template>${nameNode}/path/to/${YEAR}-${MONTH}-${DAY}/${HOUR}/</uri-template>
<done-flag></done-flag>
</dataset>
</datasets>
相关参数:
- initial-instance,对应初始时间的数据目录,作为时间周期偏移的基准目录
- uri-template,文件目录HDFS目录,
${YEAR}、${MONTH}等为EL Time Constants,具体数值由<input-events> <data-in ..>传入,也可通过job.properties传入自定义的参数。 - done-flag,数据目录生成的文件标识,若未指定,则默认为 _SUCCESS 文件;若指定为空,则表示文件夹本身。
input-events
<input-events>
<data-in name="dataReady" dataset="data">
<instance>${coord:current(-1)}</instance>
</data-in>
</input-events>
定义了数据触发条件,${coord:current(-1)}表示对于当前时间的偏移,其中偏移量=数值* dataset frequency。有些时候,我们要判断多个目录是否生成,比如,判断一天的24个小时目录,这时应这样写:
<data-in name="dataReady2" dataset="data">
<start-instance>${coord:current(-24)}</start-instance>
<end-instance>${coord:current(-1)}</end-instance>
</data-in>
action
<action>
<workflow>
<app-path>${wf_app_path}</app-path>
<configuration>
<property>
<name>dayTime</name>
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), -1, 'DAY'), 'yyyy-MM-dd')}</value>
</property>
</configuration>
</workflow>
</action>
定义coordinator要触发的workflow,
- app-path,workflow所在的HDFS目录;
- property,定义传给workflow的参数
coordinator提供了一些用于时间计算的函数,比如:
- coord:nominalTime(),返回coordinator的每一执行周期的当前时间;
- coord:dateOffset(String baseDate, int instance, String timeUnit),计算偏移后的时间,newDate = baseDate + instance * timeUnit;
- coord:formatTime(String ts, String format),定义格式化的时间,其中format应遵循Java's SimpleDateFormat。
返回多个时间:
<value>${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, 'HOUR'), -6, 'DAY'), 'yyyy-MM-dd')},${coord:formatTime(coord:dateOffset(coord:dateOffset(coord:nominalTime(), -12, 'HOUR'), -5, 'DAY')</value>
工作流引擎Oozie(二):coordinator的更多相关文章
- 工作流引擎Oozie(一):workflow
1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oo ...
- activiti工作流引擎学习(二)
1.连线 如果bpmn文件和java文件放在同一目录下,需要配置buildPath: 使用流程变量,设置连线需要的流程变量的名称,并设置流程变量的值,流程会按照指定的连线完成任务. 1.1一个活动中可 ...
- Hadoop工作流引擎之Azkaban与Oozie对比(四)
Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/93883 ...
- .net之工作流工程展示及代码分享(二)工作流引擎
在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: [Serializable] public class Flow { [Xml ...
- F2工作流引擎这工作流引擎体系架构(二)
F2工作流体系架构概览图 为了能更好的了解F2工作流引擎的架构体系,花了些时间画了整个架构的体系图.F2工作流引擎遵循参考WFCM规范,目标是实现轻量级的工作流引擎,支持多种数据库及快速应用到任何基于 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务模块的交互
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成
集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造 ...
- 用Crontab打造简易工作流引擎
1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...
- F2.Net工作流引擎系列索引
索引如下 F2工作流引擎遵循参考WFCM标准规范,符合中国国情特色,更轻量级的工作流引擎,支持多种数据库(mmsqlserver,mysql,oracle),有强大智能的组织模型接口可快速应用到任何基 ...
随机推荐
- sscanf_强大的数据读取-转换
function <cstdio> sscanf int sscanf ( const char * s, const char * format, ...); Read formatte ...
- linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程
1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...
- iOS并发编程笔记【转】
线程 使用Instruments的CPU strategy view查看代码如何在多核CPU中执行.创建线程可以使用POSIX 线程API,或者NSThread(封装POSIX 线程API).下面是并 ...
- SQLSERVER语句 in和exists哪个效率高本人测试证明
SQLSERVR语句 in和exists哪个效率高本人测试证明 最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库GPOSDB(已经有数据) 环境:SQLSERVE ...
- SQL Server 索引和表体系结构(包含列索引)
包含列索引 概述 包含列索引也是非聚集索引,索引结构跟聚集索引结构是一样,有一点不同的地方就是包含列索引的非键列只存储在叶子节点:包含列索引的列分为键列和非键列,所谓的非键列就是INCLUDE中包含的 ...
- [ASP.NET MVC 小牛之路]08 - Area 使用
ASP.NET MVC允许使用 Area(区域)来组织Web应用程序,每个Area代表应用程序的不同功能模块.这对于大的工程非常有用,Area 使每个功能模块都有各自的文件夹,文件夹中有自己的Cont ...
- Win8换成Win7系统问题小结(修改主板BIOS方法)
问题描述: 笔记本电脑W8系统使用不习惯,想要换成W7系统,但不管是用光盘安装亦或是用U盘安装,在设置系统启动项的时候,选择从光盘启动或从U盘启动,但是回车点了之后没反应. 下面就说说问题的原因及解决 ...
- xamarin 手机顶部状态栏
修改显示xamarin开发的App的手机顶部状态栏, 步骤一:在项目UWP上的“引用”里右键“添加引用”,选择->Universal Windows->Windows Mobile Ext ...
- Java接口总结
接口的定义: 使用interface来定义一个接口.接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成,定义接口的基本语法如下: [修饰符] interfac ...
- 【最后的抒情】【离NOIP还有9个小时】
学了NOIP 大概十一个月左右,中途的插班生.从2015年12月底开始学信息竞赛,在寒假的时候还笑着我还有九个月才考试呢,生竞就只有两个月了.没错我是从生物竞赛转过来的.记得当初写申请的时候,写的理由 ...