工作流引擎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>

参考:http://www.cnblogs.com/en-heng/p/5581331.html

Oozie Coordinator使用及详解

http://shiyanjun.cn/archives/684.htmlhttp://blog.csdn.net/oracle8090/article/details/54666543
时间: 2024-10-12 03:42:23

工作流引擎Oozie(二):coordinator的相关文章

工作流引擎Oozie(一):workflow

1. Oozie简介 Yahoo开发工作流引擎Oozie(驭象者),用于管理Hadoop任务(支持MapReduce.Spark.Pig.Hive),把这些任务以DAG(有向无环图)方式串接起来.Oozie任务流包括:coordinator.workflow:workflow描述任务执行顺序的DAG,而coordinator则用于定时任务触发,相当于workflow的定时管理器,其触发条件包括两类: 数据文件生成 时间条件 Oozie定义了一种基于XML的hPDL (Hadoop Process

Alex 的 Hadoop 菜鸟教程: 第20课 工作流引擎 Oozie

本文基于 Centos6.x + CDH5.x Oozie是什么 简单的说Oozie是一个工作流引擎.只不过它是一个基于Hadoop的工作流引擎,在实际工作中,遇到对数据进行一连串的操作的时候很实用,不需要自己写一些处理代码了,只需要定义好各个action,然后把他们串在一个工作流里面就可以自动执行了.对于大数据的分析工作非常有用 安装Oozie Oozie分为服务端和客户端,我现在选择host1作为服务端,host2作为客户端. 所以在host1上运行 yum install oozie 在h

微型工作流引擎设计

微型工作流引擎设计 一.前言 提到工作流很多人就会想到OA,的确OA就是典型的工作流的应用,但是工作流并不仅仅局限于OA,工作流应该算是基础框架软件,主要用于流程的重组和优化,它有广阔的应用领域.在java下有很多优秀的开源工作流可以选择比如activit5.jpbm4等,在.net下却几乎找不到令人满意的工作流引擎可用.当然不是说.net下没有开源的只是有些国产开源的但看了代码后就一点兴趣都没有了,且不说代码质量如何,还引入了一大堆的东西,想在项目中应用也是非常困难.鉴于此我还是决定自己开发一

我的微型工作流引擎设计

一.前言 提到工作流很多人就会想到OA,的确OA就是典型的工作流的应用,但是工作流并不仅仅局限于OA,工作流应该算是基础框架软件,主要用于流程的重组和优化,它有广阔的应用领域.在java下有很多优秀的开源工作流可以选择比如activit5.jpbm4等,在.net下却几乎找不到令人满意的工作流引擎可用.当然不是说.net下没有开源的只是有些国产开源的但看了代码后就一点兴趣都没有了,且不说代码质量如何,还引入了一大堆的东西,想在项目中应用也是非常困难.鉴于此我还是决定自己开发一款.NET微型工作流

Hadoop工作流引擎之Azkaban与Oozie对比(四)

Azkaban是什么?(一) Azkaban的功能特点(二) Azkaban的架构(三) 不多说,直接上干货! http://www.cnblogs.com/zlslch/category/938837.html 目前,市面上最流行的两种Hadoop工作流引擎调度器Azkaban与Oozie. 具体,可以进一步看我的博客. Azkaban概念学习系列http://www.cnblogs.com/zlslch/category/938837.html 和Oozie概念学习系列http://www.

.net之工作流工程展示及代码分享(二)工作流引擎

在介绍完表单类的时候,接下来介绍工作流引擎,主要由四个类组成,分别是流程.流程步骤.流程实例.流程步骤实例类. 流程类: 1 [Serializable] 2 public class Flow 3 { 4 [XmlAttribute] 5 public Guid FlowId { get; set; } 6 [XmlAttribute] 7 public string FlowName { get; set; } 8 public List<FlowStep> FlowSteps { get

Slickflow.NET 开源工作流引擎基础介绍(二)

集成流程引擎的必要性 业务过程的变化是在BPM系统中常见的现象,企业管理层需要不断优化组织架构,改造业务流程,不可避免地带来了业务流程的变化,企业信息系统就会随之面临重构的可能性.一种直接的方式是改造业务代码,适应业务过程的变化,这将会面临不断改写代码的需求:还有一种方式是使用流程引擎控制业务过程的变化,将改写业务代码的操作交由流程引擎,通过流程引擎解析业务规则,驱动业务过程流转,从而将改写业务代码的可能性降到最低. 显而易见,流程引擎带来的好处是为了更好解决业务过程变化后带来的重构风险,信息系

HAWQ实践(五)——自动调度工作流(Oozie、Falcon)

一旦数据仓库开始使用,就需要不断从源系统给数据仓库提供新数据.为了确保数据流的稳定,需要使用所在平台上可用的任务调度器来调度ETL定期执行.调度模块是ETL系统必不可少的组成部分,它不但是数据仓库的基本需求,也对项目的成功起着举足轻重的作用.本篇说明如何使用HDP中的Oozie和Falcon服务实现ETL执行自动化. 一.Oozie简介 Oozie是一个管理Hadoop作业.可伸缩.可扩展.可靠的工作流调度系统,它内部定义了三种作业:工作流作业.协调器作业和Bundle作业.工作流作业是由一系列

微型工作流引擎-功能设计

我的微型工作流引擎-功能设计解析及使用示例 一.前言 上一篇我给大家介绍了我的工作流的模型和基本的设计,这篇我想详细说明下我这款工作流的功能及使用示例.这款工作流主要是面向开发者设计的,为了先让大家有个全局的认识,局部功能的设计实现就不细说了,后续有时间我会继续写文章向大家介绍. 二.功能详解及使用示例代码 1.配置流程引擎,一般在程序启动过程中调用(Global.asax.cs中) //初始化流程引擎 BpmConfiguration .Instance() .Config(@"C:\Conf