我有一个在Java操作中创建的计数器

("RunJavaMainClass")
(context.getCounter("JOB_NAME_PREFIX", "QUEUED_COUNTER").increment(1);)

运作正常。

我希望能够在同一工作流程中的后续oozie操作中访问计数器值。当我尝试使用
${hadoop:counters("RunJavaMainClass")["JOB_NAME_PREFIX"]["QUEUED_COUNTER"]}

我收到错误: RunJavaMainClass 不支持Hadoop操作。
知道我在这里可能会缺少什么吗?
谢谢

最佳答案

hadoop:* EL函数仅适用于Oozie MapReduce操作,因此,即使它运行了MapReduce作业,您也无法将其用于Java操作。

相反,您可以在Java操作中使用<capture-output/>标记将输出传递到Oozie工作流上下文。在驱动程序类中,将Java属性文件写入oozie.action.output.properties中找到的位置,该位置包含您要传递回的数据(在这种情况下为您想要的计数器),然后使用${wf:actionData('action_name')['property_name']}从工作流中读取它。可以在here上找到有关此技术的更多信息。

10-07 13:13
查看更多