我有两个用Oozieworkflow.xml编写的Java操作。我想将我的第一个Java动作的输出传递给下一个Java动作以供重用。
我知道这需要使用“ oozie.action.output.properties”来完成。在第一个动作中,我将输出参数设置为“ buildFileName”,如下所示:
File file = new File(System.getProperty("oozie.action.output.properties"));
LOGGER.info("SystemGetProperty:" + System.getProperty("oozie.action.output.properties").toString());
Properties props = new Properties();
props.setProperty("buildFileName", buildFileName);
OutputStream os= new FileOutputStream(file);
props.store(os, "");
os.close();
但是不幸的是,在第二个动作中,我无法使用参数值。应用程序作业成功,但是参数值变为空。
我的第一个Java操作如下:
<action name="java-action1">
<java>
<main-class>XYZ.MyJavaAction</main-class>
<arg>Args</arg>
<capture-output />
</java>
<ok to="java-action2"/>
<error to="fail"/>
第二个Java动作如下:
<action name="java-action2">
<java>
<main-class>XYZ.MyJavaAction</main-class>
<arg>{"outputFileName":"${wf:actionData('java-action1')['buildFileName']}"}</arg>
</java>
<ok to="End"/>
<error to="fail"/>
任何人都可以帮助我在这里丢失的东西吗?
答案 0 :(得分:2)
在oozie capture_output java
上进行的Google搜索直接指向Java Cookbook部分“捕获输出元素” ,引用:
- 在此示例中,我们在JAVA操作和PIG操作之间传递了PASS_ME变量。
- 在JAVA操作中为PASS_ME变量赋予值123456 ...
main()
方法将属性文件写入oozie.action.output.properties
ENVIRONMENT变量中指定的路径...
Properties props = new Properties();
props.setProperty("PASS_ME", "123456");
File file = new File(System.getProperty("oozie.action.output.properties"));
OutputStream os = new FileOutputStream(file);
props.store(os, "");
os.close();
- PIG操作随后读取PASS_ME变量的值,并将其传递给PIG脚本...
<param>MY_VAR=${wf:actionData('java1')['PASS_ME']}</param>