将值从Java操作传递到Oozie工作流程中的下一个Java操作

时间:2019-06-28 16:25:07

标签: java hadoop hdfs oozie oozie-workflow

我有两个用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"/> 

任何人都可以帮助我在这里丢失的东西吗?

1 个答案:

答案 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>
  •