gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 16:33:17 27 4
gpt4 key购买 nike

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

archivedir/tutorial-udf.jar#udfjar

我想删除 tutorial-udf.jar 硬编码值并使其动态化。一种方法是将硬编码值写入 job.properies 文件并将其传递给 workflow.xml 文件。就像下面 workflow.xml 中的代码

/${tutorial-udf}#udfjar

这是一种方式。请建议另一种方法。

技术 oozie , Hadoop

最佳答案

如果我理解正确,您不想在作业文件(workflow.xml 或 job.properties)中对 jar 文件的名称进行硬编码,而是寻找一种在运行时确定 jar 名称的方法。这样就可以在同一作业的两次连续运行之间更改 jar,而无需更新任何作业文件。
如果我的理解是正确的,你可以有一个 java Action 来“计算”jar 的名称。该计算可以是多种多样的:预定义的 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 类生成属性( 标记):

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

关于hadoop - 如何从 oozie 中的 workflow.xml 中删除硬编码值(如缓存文件)并使其动态化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19264735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com