0

我在 workflow.xml 文件中有硬编码值(如缓存文件) Workflow.xml 文件包含以下硬编码的 jar

archivedir/tutorial-udf.jar#udfjar

我想删除 tutorial-udf.jar 硬编码值并使其动态化。我可以通过将硬编码值写入job.properies文件并将其传递给workflow.xml文件来做到这一点的一种方法。就像下面的工作流.xml 中的代码

/${tutorial-udf}#udfjar

这是一种方式。请提出另一种方法。

技术oozie,Hadoop

4

1 回答 1

2

如果我理解正确,您不想在作业文件(workflow.xml 或 job.properties)中硬编码 jar 文件的名称,而是寻找一种在运行时确定 jar 名称的方法。这样,可以在同一作业的 2 次连续运行之间更改 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']}
于 2013-10-12T12:39:35.850 回答