我有一个在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上找到有关此技术的更多信息。