我有以下oozie工作流:
<workflow-app name="${workflow_name}" xmlns="uri:oozie:workflow:0.4">
<global>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapred.job.queue.name</name>
<value>${launcherQueueName}</value>
</property>
<property>
<name>mapred.queue.name</name>
<value>${launcherQueueName}</value>
</property>
</configuration>
</global>
<start to="email-1" />
<action name="email-1">
<email xmlns="uri:oozie:email-action:0.1">
<to>${toEmailList}</to>
<cc>${ccEmailList}</cc>
<subject>ts</subject>
<body>
TIMESTAMP: ${timestamp()}
</body>
</email>
<ok to="mail-2" />
<error to="kill-fail" />
</action>
... 4 more actions for mail-2, mail-3 and mail-4
<kill name="kill-fail">
<message>${workflow_name} failed, error
message[${wf:errorMessage(wf:lastErrorNode())}]
</message>
</kill>
<end name="end" />
</workflow-app>
我收到的电子邮件的时间戳值如下
TIMESTAMP: 2016-01-27T16:19Z
根据el定义,应采用以下格式:(yyyy-mm)-ddthh:mm:ss.sz
为什么我没有时间?
我实际要做的是:我试图弄清楚这四个函数调用是否总是返回相同的值或不同的值。我需要一些不变的东西,所以如果timestamp()对我不起作用,那么我想考虑协调器的nominaltime/actualtimeel函数。
如果我们无法获得时间戳中的秒数,是否有方法暂停每个操作,以便允许它们在超过一分钟的时间范围内执行?
编辑:samson scharfrichter总结了以下答案:
1) 为什么timestamp()中没有秒?
以前的版本有秒,但版本4.2没有。
2) 有没有一个函数也能给我几秒钟的时间?
afaik不
3) 如何在工作流的所有操作中使用相同的时间值?
通过coord:nominaltime()作为来自协调器的属性,并在操作中多次使用它。
4) 如何在工作流中暂停操作?
这不是简单的办法。使用一个java操作—一个jar和一个执行thread.sleep()的简单类
1条答案
按热度按时间2eafrhcq1#
引用oozie v4.2文档
4.2.2基本el功能
字符串时间戳()
它以iso8601格式返回当前日期时间,精确到分钟(yyyy-mm)-ddthh:mmz),在oozie的处理时区,即1997-07-16t19:20z
这似乎和你得到的很一致。
您可以格式化
coord:nominalTime()
如果你愿意的话,可以降到第二个,但是在协调器中——因此你必须把结果塞进一个<configuration>
属性将其转发到工作流脚本。还有阿法克
coord:actualTime()
指的是过去协调器开始考虑其下一个工作流示例的不确定时间。我无法想象它能用来做什么。顺便说一句,我不明白“你到底想做什么”;如果您只想为您的操作生成唯一的id,那么有很多方法可以做到这一点,而不必依赖oozie速度慢并且不会在同一秒内执行多个操作的事实。