我是Apache Oozie的新手,據我瞭解,工作流程/協調器作業必須在xml文件中預先定義。但是,在我的問題中,我需要動態定義工作流程,這取決於輸入文件,我可能在工作流程中有額外的操作。有沒有什麼辦法可以通過程序來做到這一點?如何在Apache Oozie中動態定義工作流程?
回答
工作流程&協調員是預先定義的文件 - 這並不意味着您無法控制工作流操作。
如果您的工作流程中有多個案例/流程,您可以添加Decision Control Node來控制工作流程中的流程。
例如,讓說,你說,如果我輸入一個會做ActionA_1,ActionA_2和輸入情況B會做ActionB_1,ActionB_2,使用Decision Control Node選擇執行路徑遵循
我完全MZF的迴應同意,但想添加一些東西來回答jamiet的問題,並創建一個更一般的答案。 如果將工作流程拆分爲多個流程/案例是有意義的,那麼決策控制節點就是要走的路。
然而,有時需要 - 像jamiet在評論中詢問的那樣 - 您想調用一個工作流程/操作來對集合進行迭代。這意味着每次運行工作流程時,工作流程的可能長度可能會從1次操作變爲100次,具體取決於集合。這不是您可以使用簡單的決策控制節點表示的東西。我的一個用例是生成一個工作流程,以便爲配置文件中存在的每個表/數據庫對執行sqoop導入。
我對這個問題的解決方案是讓1個工作流調用可能帶有一些參數的自定義腳本。然後,此腳本將構建「動態工作流程」的workflow.xml文件,其中包含與您的集合對應的操作。一旦構建workflow.xml,該腳本將調用oozie job
,並帶有指向新創建的workflow.xml的job.properties文件。
我正在尋找這樣的解決方案來導入以前未知數量的外部數據源,即一些Google工作表通過BigQuery。目前,我正在使用Bash + Python Script並行獲取所有數據,然後使用'hdfs','hive'和'impala-shell' CLI按順序將獲取的數據加載到Hadoop/Hive。每個步驟都有實際的工作流程操作將使過程更加透明,可重複和可調試。您可以在答案中添加一些代碼,顯示一個基本設置,以便從主工作流程動態創建1到100個後續工作流程? – Juve
我覺得真正的代碼會增加我的答案,並會失去一些通用性。所以我的建議是創建能夠基於某些輸入動態構建workflow.xml文件的代碼。如果例如你需要有100個查詢,你應該考慮寫一個函數,輸出一個oozie xml Hive
- 1. Apache Oozie工作流程
- 2. 如何在oozie工作流程中獲得oozie jobId?
- 3. Oozie協同工作流程
- 4. Oozie迭代工作流程
- 5. Oozie Hive工作流程intermitent
- 6. 縮短Oozie工作流程
- 7. Oozie的工作流程shellAction
- 8. 如何在子工作流失敗時中止oozie工作流?
- 9. 如何在Oozie工作流程EL功能中使用Oozie作業屬性?
- 10. oozie中的共享工作流程
- 11. 如何在以前的工作流程完成時觸發Oozie工作流程
- 12. Oozie:在本地測試工作流程
- 13. 如何使用子工作流程在oozie中循環?
- 14. 如何在oozie工作流程中創建和設置變量?
- 15. Oozie:子工作流操作:如何檢索子工作流ID?
- 16. 如何調試動態工作流(使用自定義活動)
- 17. Oozie工作流程架構錯誤
- 18. Azure的Oozie的工作流程
- 19. 停止Oozie工作流程執行
- 20. 與開始Oozie的工作流程
- 21. 如何在將來的日期運行oozie工作流程
- 22. 爲Oozie的工作流
- 23. 無法使用java動作運行oozie工作流程
- 24. Oozie-sqoop工作流程掛在心臟跳動問題cloudera
- 25. oozie:如何在相應的工作流中使用oozie coodinator屬性?
- 26. iOS中的動態ax工作流程
- 27. Microsoft動態CRM自定義工作流程
- 28. 如何在oozie工作流中運行hadoop示例jar?
- 29. 從狀態工作流程內啓動順序工作流程
- 30. 工作流引擎可以動態綁定流中的動作
如果我必須做一些事情,比如迭代集合併爲每個迭代值調用工作流程,該怎麼辦?那可能嗎? (是的,我完全接受這與Oozie工作流程的整個概念是DAG相反,但有時需要) – jamiet