如何从oozie的workflow.xml中删除硬编码值(如缓存文件)并使其动态化?

时间:2013-10-09 06:31:36

标签: hadoop oozie

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

archivedir /教程udf.jar#udfjar

我想删除tutorial-udf.jar硬编码值并使其动态化。 我可以通过将硬编码值写入job.properies文件并将其传递给workflow.xml文件来实现此目的。 与下面的workflow.xml中的代码一样

/ $ {教程UDF} #udfjar

这是一种方式。请采取另一种方式。

技术oozie,Hadoop

1 个答案:

答案 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']}