是否可以在不杀死Oozie Workflow的情况下记录消息

时间:2016-04-21 11:07:40

标签: oozie oozie-coordinator

我有一个有点复杂的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'很重要。

1 个答案:

答案 0 :(得分:0)

我可以看到的一种方法是,您可以在工作流的末尾放置一个shell脚本,并将值记录为shell脚本的参数。在shell脚本中,在文件中写入这些参数的值,并将文件复制到hdfs。

完成作业后,您可以检查hdfs中存储的文件中这些属性的值。

希望这有帮助。