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

i1icjdpr  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(510)

是否有任何方法可以通过电子邮件将工作流的持续时间与完成电子邮件联系起来?有这样一个变量我可以使用吗?

uajslkp6

uajslkp61#

这是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功能,但还没有找到提取数据的方法。

bttbmeg0

bttbmeg02#

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

相关问题