如何将Oozie配置值传递给工作流操作?
例如,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>
目前,$ 在Java属性文件中被硬编码,因为Oozie已经知道了作业跟踪器URL,所以复制了这些信息 . 是否可以在worklow.xml文件中引用Oozie配置?我试过以下没有誓言:
<job-tracker>${oozie.actions.default.job-tracker}</job-tracker>
这将返回一个错误,指出未定义变量'oozie' .
我想避免为DEV,QA和PROD创建特定的属性文件,因为Oozie已经知道环境的特定配置,我希望它将数据传递给协调器和工作流 .
2 回答
您应该能够使用
<job-tracker>${wf:conf('oozie.actions.default.job-tracker')}</job-tracker>
访问变量数据如果您不想在每个工作流程中定义 name-node 和 job-tracker ,则只需在Oozie服务配置( oozie-site )中添加以下属性:
它使用 Oozie 4.2.0 对我有用 .