是否可以在不终止 Oozie 工作流的情况下记录消息

Is it possible to log a message from an Oozie Workflow without killing it

我有一个有点复杂的 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 class 设置。 在执行 'action1' 和 'action2' 之间,我想记录这些字段的值。我不太关心值记录到哪里,我只需要能够看到这些值是什么。

我不想调用我的 'kill' 操作来进行日志记录,因为 'action2' 是 运行 很重要。

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

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

希望对您有所帮助。