2016-03-07 88 views
1

如何將Oozie配置值傳遞給工作流操作?如何將Oozie配置傳遞給工作流操作,如Hive?

例如,Oozie的知道作業服務器的URL:

# oozie admin -oozie localhost:10000 -configuration | fgrep tracker 
oozie.actions.default.job-tracker : server1:8080 

現在workflow.xml,我們發現:

<action name="hive-5228" cred="hcat"> 
    <hive xmlns="uri:oozie:hive-action:0.2"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     [... deleted parameters for clarity ...] 
    </hive> 
    <ok to="hive-38fe"/> 
    <error to="email-c6f0"/> 
</action> 

目前,$ {}的JobTracker在一個Java硬編碼屬性文件,因爲Oozie已經知道作業跟蹤器URL,所以複製這些信息。是否可以從worklow.xml文件中引用Oozie配置?我嘗試了以下方法來避免vail:

<job-tracker>${oozie.actions.default.job-tracker}</job-tracker> 

這會返回一個錯誤,指出未定義變量'oozie'。

我想避免爲DEV,QA和PROD創建特定的屬性文件,因爲Oozie已經知道環境的特定配置,所以我希望它將數據傳遞給協調者和工作流。

回答

1

你應該能夠訪問變量數據使用<job-tracker>${wf:conf('oozie.actions.default.job-tracker')}</job-tracker>

+0

我試過了,它不起作用。使用Oozie 4.1.0-cdh5.5.2。 –

+1

按照https://oozie.apache.org/docs/3.3.1/WorkflowFunctionalSpec.html#a4.1_Workflow_Job_Properties_or_Parameters,它看起來像你不能直接訪問*標識*格式的屬性,但是使用wf:conf(property)來訪問它。我不知道爲什麼你正在閱讀的變量無法訪問。可能你可以嘗試訪問'wf:conf {'job-tracker'}'而不是?跳過'oozie.actions.default' – rahulbmv

+0

我試過'$ {wf:conf {'job-tracker'}}',它也失敗了。看起來像'$ {wf:conf()}'僅適用於開始作業時作爲參數傳遞的值,即使用-D標誌或提供的屬性文件。 Oozie配置不會縫合以供工作流程使用。 –