2016-01-26 21 views
0

我想創建一個與依賴文件的協調器 - 觸發文件。 我的協調員的頻率是5分鐘。超時時間爲4分鐘。基於Oozie觸發文件的協調器。觸發文件不是從小時文件夾

我的目標是協調員只有在創建指定的觸發器文件時才應該執行工作流程。在沒有創建觸發文件的情況下,協調員應該等到文件創建並在第4分鐘結束時超時。協調員觸發工作流程後,工作流程將刪除觸發器文件。每當源數據更新時都會觸發該文件,因此我們必須再次運行工作流程。

觸發器文件可能會一天出現多次,所以我將協調器頻率設置爲5分鐘。我曾嘗試用下面的代碼:

<coordinator-app name="transform_data_if_exists_coord" frequency="${freqMin}" start="${startDate}" end="${endDate}" timezone="${timeZone}" xmlns="uri:oozie:coordinator:0.1"> 
    <controls> 
     <timeout>${timeOutMin}</timeout> 
     <concurrency>${concurrencyCount}</concurrency> 
    </controls> 
    <datasets> 
     <dataset name="input1" frequency="${coord:minutes(${freqMin})}" initial-instance="${startDate}" timezone="${timeZone}"> 
     <uri-template>maprfs:////idn/home/deploy/inputdata/file</uri-template> 
     <done-flag>trigger</done-flag> 
     </dataset> 
    </datasets> 

    <action> 
     <workflow> 
     <app-path>/idn/home/deploy/triggerEmail/triggerEmail_wf.xml</app-path> 
     </workflow> 
    </action> 
</coordinator-app> 

下面的屬性:

startDate=2016-01-26T18:20Z 
endDate=2017-01-17T06:00Z 
timeZone=UTC 
freqMin=5 
timeOutMin=4 
concurrencyCount=1 

回答

0

您需要在行動

<input-events> 
      <data-in name="check_for_input" dataset="input1"> 
      <instance>${startTime2}</instance> 
      </data-in> 
    </input-events> 

    <action> 
     <workflow> 
     <app-path>/idn/home/deploy/triggerEmail/triggerEmail_wf.xml</app-path> 
<configuration> 
       <property><name>WaitForThisInputData</name><value>${coord:dataIn('check_for_input')}</value></property> 
</configuration> 
     </workflow> 
    </action 

>

+0

感謝您的回覆。 但我面臨以下問題: 因爲問題很長,以適應評論框。我已經將它添加爲答案。請看看它。請儘可能回答。 –

0

添加輸入事件和財產WaitForThisInputData儘管只有當觸發文件存在時,我的工作流纔會被啓動。 有時雙工作流程正在使用相同的父協調器實例啓動。 即可以說,如果協調員協調的第25屆實例揭開序幕然後,工作流工作流程id包含父爲 0001212-XXXXXXX-Oozie的-MAPR-C @ 25

,但我看到了兩個工作流程越來越拉開序幕,同父協調實例這並不理想。這兩項工作正在同一時間開始。 我是否缺少財產。我已將協調器的併發性設置爲1. 觸發器文件在數小時後出現嚴重間隔後纔會出現此問題。