我有一个有点复杂的Oozie工作流程,我希望能够在流程的各个点看到一些属性。显而易见的解决方案是简单地将消息写入日志。
我已经浏览了official documentation,看来支持日志记录的唯一操作是Kill操作!
是否有记录一组属性而不杀死工作流程?
更新(提供更多详情)
因此,想象一下我的(简化)工作流程看起来像:
<workflow-app name="myWorkflow" xmlns="uri:oozie:workflow:0.5">
<start to="action1"/>
<kill name="Kill">
<message>Failed: error ${myField}</message>
</kill>
<action name='action1'>
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>default</value>
</property>
</configuration>
<main-class>my.Class</main-class>
<arg>${myArgument}</arg>
<capture-output/>
</java>
<ok to="action2" />
<error to="Kill" />
</action>
<action name='action2'>
<ok to="End" />
<error to="Kill" />
</action>
<end name="End"/>
</workflow-app>
在工作流程中,我有一些名为$ {myField},$ {myArgument},$ {jobTracker}和$ {nameNode}的字段。其中一些是由启动过程设置的属性,其他一些将由我从'action1'调用的Java类设置。 在执行'action1'和'action2'之间,我想记录这些字段的值。我不太关心值的记录位置,我只需要能够看到值是什么。
我不想调用我的'kill'动作进行日志记录,因为运行'action2'很重要。
答案 0 :(得分:0)
我可以看到的一种方法是,您可以在工作流的末尾放置一个shell脚本,并将值记录为shell脚本的参数。在shell脚本中,在文件中写入这些参数的值,并将文件复制到hdfs。
完成作业后,您可以检查hdfs中存储的文件中这些属性的值。
希望这有帮助。