• oozie中事件触发input-events和done-flag


    样例如下:

    <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>_SUCCESS</done-flag>
            </dataset>
        </datasets>    
        <input-events>
            <data-in name="input" dataset="input_data">
                <instance>${coord:current(-1)}</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执行。

     

  • 相关阅读:
    迎战智能手机时代,芯片厂商谁能笑到最后?
    古老Ubuntu 安装 EDB 的奇葩旅程
    今天做了一个很糟糕的storage and buffer manager
    android 数据库SQL 框架例子
    关于VS2008编译错误"error LNK2005: 已经在 .obj 中定义"
    ListActivity源码分析
    最优非对称加密填充(OAEP)
    EVP_DigestInit(3)源码解析
    Java EE学习笔记(1:Servlet & JSP)
    Servlet
  • 原文地址:https://www.cnblogs.com/30go/p/8353826.html
Copyright © 2020-2023  润新知