2015-02-05 56 views
3

查看Oozie示例和文檔,看起來您需要一個工作流程文件才能從Java代碼運行oozie作業。有沒有辦法直接從Java代碼提交作業,而不需要工作流程文件?是否有任何預先存在的方式通過Java代碼動態生成這些文件?是否有任何預先存在的工具可以使它們更容易生成?還是必須編寫完整的代碼才能生成文件?使用Java代碼生成Oozie工作流程

現狀

OozieClient wc = new OozieClient("http://bar:8080/oozie"); 

    Properties conf = wc.createConfiguration(); 
    conf.setProperty(OozieClient.APP_PATH, "workflow file path"); 
    // set other properties 
    ... 

    // submit and start the workflow job 
    wc.run(conf); 

理想的情況是隱約的東西像這樣。

OozieAction action = new OozieAction("actionName"); 
action.setOkDestination("nextAction"); 
action.setErrorDestination("errorDestination"); 
//Rest of config for action 

OozieWorkflow workflow = new Oozieworkflow(); 
workfow.setStartAction(action); 
workflow.addAction(otherAction); 
//rest of conf 

OozieClient wc = new OozieClient("http://bar:8080/oozie"); 
wc.runWorkflow(workflow); 

這將是可取的,如果前者是impossibble另一種情況是:

OozieAction action = new OozieAction("actionName"); 
action.setOkDestination("nextAction"); 
action.setErrorDestination("errorDestination"); 

//Rest of config for action 

OozieWorkflow workflow = new Oozieworkflow(); 
workfow.setStartAction(action); 
workflow.addAction(otherAction); 

//rest of conf 

workflow.writeToFile("some localFile") 


//load file to HDFS 

//This would also work 
// workflow.writeToHDFS("someHdfsLocation"); 

OozieClient wc = new OozieClient("http://bar:8080/oozie"); 

//run with created workflow 
+1

我認爲Oozie需要在HDFS中提供workflow.xml,這將使您的首選方法變得不可能。一種選擇是以編程方式生成XML文件,將其上傳到HDFS並將其傳遞給Oozie運行。 – LiMuBei 2015-02-13 09:15:08

回答

2

我已經在類似的情況。

我會建議使用oozie模式定義(xsd)並通過xjc生成與java等效的對象。鑑於這些對象可以或許創建工作流(不是小事雖然)

有基於Scala的DSL的,你可以使用 https://github.com/klout/scoozie確實與Scala-類似> Oozie的一代

0

在你的HDFS靜態Oozie的工作流程,其只需要2個參數並寫入參數1的內容(說的內容,其用戶輸入)到參數2(寫入HDFS)。現在調用oozie CLI並指定app.path作爲工作流創建的位置1