2015-04-15 38 views
1

我是Apache Oozie的新手,據我瞭解,工作流程/協調器作業必須在xml文件中預先定義。但是,在我的問題中,我需要動態定義工作流程,這取決於輸入文件,我可能在工作流程中有額外的操作。有沒有什麼辦法可以通過程序來做到這一點?如何在Apache Oozie中動態定義工作流程?

回答

0

工作流程&協調員是預先定義的文件 - 這並不意味着您無法控制工作流操作。

如果您的工作流程中有多個案例/流程,您可以添加Decision Control Node來控制工作流程中的流程。

例如,讓說,你說,如果我輸入一個會做ActionA_1,ActionA_2和輸入情況B會做ActionB_1,ActionB_2,使用Decision Control Node選擇執行路徑遵循

+0

如果我必須做一些事情,比如迭代集合併爲每個迭代值調用工作流程,該怎麼辦?那可能嗎? (是的,我完全接受這與Oozie工作流程的整個概念是DAG相反,但有時需要) – jamiet

0

我完全MZF的迴應同意,但想添加一些東西來回答jamiet的問題,並創建一個更一般的答案。 如果將工作流程拆分爲多個流程/案例是有意義的,那麼決策控制節點就是要走的路。

然而,有時需要 - 像jamiet在評論中詢問的那樣 - 您想調用一個工作流程/操作來對集合進行迭代。這意味着每次運行工作流程時,工作流程的可能長度可能會從1次操作變爲100次,具體取決於集合。這不是您可以使用簡單的決策控制節點表示的東西。我的一個用例是生成一個工作流程,以便爲配置文件中存在的每個表/數據庫對執行sqoop導入。

我對這個問題的解決方案是讓1個工作流調用可能帶有一些參數的自定義腳本。然後,此腳本將構建「動態工作流程」的workflow.xml文件,其中包含與您的集合對應的操作。一旦構建workflow.xml,該腳本將調用oozie job,並帶有指向新創建的workflow.xml的job.properties文件。

+0

我正在尋找這樣的解決方案來導入以前未知數量的外部數據源,即一些Google工作表通過BigQuery。目前,我正在使用Bash + Python Script並行獲取所有數據,然後使用'hdfs','hive'和'impala-shell' CLI按順序將獲取的數據加載到Hadoop/Hive。每個步驟都有實際的工作流程操作將使過程更加透明,可重複和可調試。您可以在答案中添加一些代碼,顯示一個基本設置,以便從主工作流程動態創建1到100個後續工作流程? – Juve

+0

我覺得真正的代碼會增加我的答案,並會失去一些通用性。所以我的建議是創建能夠基於某些輸入動態構建workflow.xml文件的代碼。如果例如你需要有100個查詢,你應該考慮寫一個函數,輸出一個oozie xml Hive 。然後可以根據需要多次使用正確的參數調用該函數。最後,您將擁有包含儘可能多的操作的workflow.xml文件。每次調用該代碼時都可以生成不同的workflow.xml。 – spijs