2015-09-04 100 views
0

我有三個協調員A,B和COozie的協調輸入事件不起作用

B和C的協調取決於A的輸出也就是說,如果A的輸出就緒,協調員B和C將運行。

所以,我使用輸入事件來控制這種依賴關係。

協調員B和C的結構看起來像

<coordinator-app name="B" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1"> 
    <datasets> 
     <dataset name="input1" frequency="1440" initial-instance=${start} timezone="UTC"> 
     <uri-template>hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}</uri-template> 
     </dataset> 
    </datasets> 
    <input-events> 
     <data-in name="coordInput1" dataset="input1"> 
      <instance>${coord:current(0)}</instance> 
     </data-in> 
    </input-events> 
    <action> 
     <workflow> 
     <app-path>hdfs://localhost:9000/B/workflows</app-path> 
     </workflow> 
    </action>  
</coordinator-app> 

因此,如果創建hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS,協調B和C將被觸發運行他們的工作流程。

A的協調是這樣的:

<coordinator-app name="B" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1"> 
    <action> 
     <workflow> 
     <app-path>hdfs://localhost:9000/A/workflows</app-path> 
     </workflow> 
    </action> 
</coordinator-app> 

${start}${end}是相同B和C.

A的工作流將創建hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS

然而,B的協調器和C仍在等待hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}/_SUCCESS

即使我使用輸出A的協調員事件,B和C的工作流程仍然需要創建的輸入數據集。

<coordinator-app name="A" frequency="1440" start=${start} end=${end} timezone="UTC" xmlns="uri:oozie:coordinator:0.1"> 
    <datasets> 
     <dataset name="output1" frequency="1440" initial-instance=${start} timezone="UTC"> 
     <uri-template>hdfs://localhost:9000/tmp/revenue_feed/${YEAR}/${MONTH}/${DAY}</uri-template> 
     </dataset> 
    </datasets> 

    <output-events> 
     <data-out name="coordOutput1" dataset="output1"> 
      <instance>${coord:current(0)}</instance> 
     </data-out> 
    </output-events> 
    <action> 
     <workflow> 
     <app-path>hdfs://localhost:9000/A/workflows</app-path> 
     </workflow> 
    </action> 
</coordinator-app> 

但是,如果我提交A的工作流程而沒有其協調員,那麼B和C的工作流程將按預期觸發。

我不確定是否在我的協調員A中缺少某些東西。

謝謝!

+0

** Q1。**在您的代碼示例中,協調員A被命名爲「B」。這是一個複製/粘貼錯字? ** Q2。**當* A *完成時,您爲什麼不併行觸發2個子工作流程(* B *和* C *)?因爲* A *可能希望在* B *之前重新啓動和/或* C *完成了嗎? –

+0

是的!這是一個錯字。是否可以直接從一個工作流觸發工作流,並使用oozie並行運行每個工作流(B和C是並行運行的)?我不知道該怎麼做。 –

+0

查看「叉/加入」操作和「子工作流」操作。例如,在那個老的,但全面的教程:http://www.infoq.com/articles/oozieexample * - 然後標記我的評論是有用的,如果它是: - )*) –

回答

0

的原因是你沒有指定的完成標誌,所以Oozie的使用默認:_success

完成標誌:爲數據集的完成文件。如果done-flag不是指定的 ,那麼Oozie將Hadoop配置爲在 的輸出目錄中創建_SUCCESS文件。如果完成標誌設置爲空,則協調器會查找目錄本身的存在。

您應該添加一個空

<done-flag></done-flag> 

到數據集。

+0

實際上,A的工作流程在其輸出目錄中創建了_success文件,但其他相關工作流程未運行。 –

+0

哦,我看到了,你也爲它着想......真的很奇怪。讓我複製你的問題。 – kecso