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執行。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM