我在workflow.xml文件中有硬编码值(比如缓存文件) Workflow.xml文件包含以下硬编码的jar
archivedir /教程udf.jar#udfjar
我想删除tutorial-udf.jar硬编码值并使其动态化。 我可以通过将硬编码值写入job.properies文件并将其传递给workflow.xml文件来实现此目的。 与下面的workflow.xml中的代码一样
/ $ {教程UDF} #udfjar
这是一种方式。请采取另一种方式。
技术oozie,Hadoop
答案 0 :(得分:2)
如果我理解正确,您不希望在作业文件(workflow.xml或job.properties)中硬编码jar文件的名称,并且您在运行时搜索确定jar名称的方法。这样,jar可以在同一作业的两次连续运行之间进行更改,而无需更新任何作业文件
如果我的理解是正确的,你可以有一个“计算”jar名称的java动作。该计算可以是各种各样的:在预定义的HDFS文件夹中存在jar,在预定义的HDFS文件夹中存在最新的jar,在HDFS中的预定义文件中写入的jar的名称等。
在这种情况下:
1.在java类中,“保存”jar名称:
Properties props = new Properties();
props.setProperty("jarFileName", jarName);
OutputStream os = new FileOutputStream(new File(System.getProperty("oozie.action.output.properties")));
props.store(os, "");
os.close();
2.在workflow.xml中,指定java类生成属性(< capture-output />标记):
<action name="init-jar-name">
<java>
<!-- Configurations -->
<main-class>com.example.JarNameFinder</main-class>
<capture-output /> <!-- Important for retrieving the properties set in the java class -->
</java>
<ok to="nextNodeName" />
<error to="errorNodeName" />
</action>
3.在workflow.xml中,在需要jar文件名的位置,您可以这样指定:
${wf:actionData('init-jar-name')['jarFileName']}