2015-07-28 54 views
0

我有2列象過程行分別在Oozie的

pkg1 date1 
pkg2 date2 
pkg3 date3 
... 
... 

我想要創建一個工作流Oozie的將分別處理每行一個簡單的輸入文件。對於每一行,我想要一個接一個地運行多個Actions(Hive,Pig ..),然後處理另一行。 但它比我預期的更困難。我想,我必須以某種方式創建一個循環並遍歷它。

你能給我建築建議我怎麼能做到這一點?

回答

1

Oozie的不支持循環/週期,因爲它是向非循環圖

https://oozie.apache.org/docs/3.3.0/WorkflowFunctionalSpec.html#a2.1_Cycles_in_Workflow_Definitions

此外,沒有內置的方式(即我所知道的)來讀取數據蜂房成Oozie工作流程,並用它來控制Oozie工作流程。

您可以使用一個Oozie工作流啓動一些自定義進程(例如Shell Action),並在該進程中讀取Hive中的數據,併爲每個條目啓動一個新的單獨的Oozie工作流。

1

我完全同意@Mattinbits,你必須使用一些程序代碼(shell腳本,Python等)來運行循環並啓動適當的Pig/Hive任務。

如果您過程必須等待的任務啓動下一批次之前完成,協調部分可能會變得更加複雜一點來實現。我能想到的使用了Oozie進行的協調非常邪惡的方式...

  • 寫下一個通用的工作流程Oozie的運行1組參數豬/蜂巢行動,性能經過
  • 寫下來一個「主模板」Oozie工作流程,只是運行上面的WF作爲子工作流程具有屬性的虛擬值
  • 將模板分爲三部分:XML標題,子工作流程調用(佔位符爲實際值屬性)和XML頁腳
  • 然後您的循環將構建實際的「主」工作流動態通過連接標頭,調用第一組值的子工作流,調用第二組等等,然後腳註 - 最後將工作流提交給Oozie服務器(使用REST或命令行界面)

當然還有一些其他的事情需要注意 - 爲子工作流操作,鏈接它們,處理錯誤生成唯一的名稱。通常的東西。