如何在最后获得oozie工作流程持续时间

时间:2014-12-04 16:33:07

标签: hadoop oozie oozie-coordinator

有没有办法用完成电子邮件通过电子邮件发送工作流程的持续时间?我可以使用这样的变量吗?

2 个答案:

答案 0 :(得分:0)

我不认为这样的变量是可用的。但如果需要,你可以使用shell动作。在工作流程开始时,执行shell脚本以开始时间并将其保存在变量中。在工作流程刚刚结束之前,您的电子邮件操作有另一个shell脚本,它将计算当前时间 - 开始时间并在您的电子邮件中使用它。但这会使您的工作流程变脏

答案 1 :(得分:0)

这是Oozie的一个显着缺点。我们的每个工作流都以一个shell动作开始,该动作调用一个简单的bash脚本来获取时间戳。

<action name="start-time">
  <shell xmlns="uri:oozie:shell-action:0.1">
    <job-tracker>${jobTracker}</job-tracker>
    <name-node>${nameNode}</name-node>
    <exec>utc-time.sh</exec>
    <file>../common/utc-time.sh#utc-time.sh</file>
    <capture-output/>
  </shell>
  <ok to="the-first-actual-action"/>
  <error to="fail"/>
</action>

这可以通过我们在完成时发送的电子邮件中的Java EL测试,错误,如下:

<action name="email">
  <email xmlns="uri:oozie:email-action:0.1">
    <to>${emailsToAlert}</to>
    <subject>COMPLETED: ${wf:name()}</subject>
    <body>
      Workflow ID: ${wf:id()}
      Workflow Name: ${wf:name()}
      Workflow app path: ${wf:appPath()}
      Start Time: ${wf:actionData('start-time')['time']}
      End Time: ${timestamp()}
    </body>
  </email>
  <ok to="end"/>
  <error to="fail"/>
</action>

获取持续时间是另一个跳过练习,包括将开始和结束时间传递给bash脚本。

我正在调查Oozie SLA functionality,但我还没有找到提取数据的方法。