我有一个在java操作中创建的计数器
("RunJavaMainClass")
(context.getCounter("JOB_NAME_PREFIX", "QUEUED_COUNTER").increment(1);)
功能正常。
我希望能够在同一工作流中的后续oozie操作中访问计数器值。当我试图用
${hadoop:counters("RunJavaMainClass")["JOB_NAME_PREFIX"]["QUEUED_COUNTER"]}
我得到一个错误:runjavamainclass中不支持hadoop操作。你知道我在这里可能遗漏了什么吗?谢谢
2条答案
按热度按时间wfveoks01#
给定oozie作业id和计数器名称,以下shell脚本可能适合您:
q35jwt9p2#
这个
hadoop:*
el函数只可用于oozie mapreduce操作,因此即使java操作可能运行了mapreduce作业,也不能将它们用于java操作。相反,您可以使用
<capture-output/>
标记java操作以将输出传递到oozie工作流上下文。在驱动程序类中,将java属性文件写入oozie.action.output.properties
包含要传回的数据(在本例中是所需的计数器),然后使用从工作流中读取它${wf:actionData('action_name')['property_name']}
. 关于这项技术的更多信息可以在这里找到。