Oozie Workflow EL 函数 timestamp() 不给秒
Oozie Workflow EL function timestamp() does not give seconds
我有以下 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
为什么我没有得到秒数?
我实际上想做的是:我想弄清楚这四个函数调用是否总是 return 相同的值或不同的值。我需要一些不会改变的东西,所以如果 timestamp() 对我不起作用,那么我想考虑协调器的 NominalTime / ActualTime EL 函数。
如果我们无法获取时间戳中的秒数,有没有办法暂停每个动作,让它们在超过一分钟的时间范围内执行?
编辑:
Samson Scharfrichter 总结了以下答案:
1) 为什么 timestamp() 中没有秒数?
Previous versions had seconds but version 4.2 does not.
2) 有没有可以秒秒的功能?
AFAIK No
3) 如何在工作流的所有动作中使用相同的时间值?
Pass coord:nominalTime() as a property from coordinator and use it multiple times in actions.
4) 如何让工作流程中的动作暂停?
Thre is no simple way.
Use a java action - a jar with a simple class which does Thread.sleep()
引用 Oozie documentation for V4.2
4.2.2 Basic EL Functions
String timestamp()
It returns the current datetime in ISO8601 format, down to minutes
(yyyy-MM-ddTHH:mmZ), in the Oozie's processing timezone, i.e.
1997-07-16T19:20Z
这似乎与您得到的非常一致。
如果您愿意,您可以将 coord:nominalTime()
格式化为秒,但是 在协调器 中 - 因此您必须将结果填充到 <configuration>
属性 将其转发到工作流脚本。
而 AFAIK coord:actualTime()
指的是 non-deterministic 时间,在过去,当协调器开始考虑其下一个工作流实例时。想不到有什么用
顺便说一句,我没听懂 "what [you] are actually trying to do" ;如果您想要的只是为您的操作生成唯一的 ID,您有很多方法可以做到这一点,而无需依赖 Oozie 速度慢并且不会在同一秒内执行多个操作这一事实。
我有以下 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
为什么我没有得到秒数?
我实际上想做的是:我想弄清楚这四个函数调用是否总是 return 相同的值或不同的值。我需要一些不会改变的东西,所以如果 timestamp() 对我不起作用,那么我想考虑协调器的 NominalTime / ActualTime EL 函数。
如果我们无法获取时间戳中的秒数,有没有办法暂停每个动作,让它们在超过一分钟的时间范围内执行?
编辑: Samson Scharfrichter 总结了以下答案:
1) 为什么 timestamp() 中没有秒数?
Previous versions had seconds but version 4.2 does not.
2) 有没有可以秒秒的功能?
AFAIK No
3) 如何在工作流的所有动作中使用相同的时间值?
Pass coord:nominalTime() as a property from coordinator and use it multiple times in actions.
4) 如何让工作流程中的动作暂停?
Thre is no simple way. Use a java action - a jar with a simple class which does Thread.sleep()
引用 Oozie documentation for V4.2
4.2.2 Basic EL Functions
String timestamp()
It returns the current datetime in ISO8601 format, down to minutes (yyyy-MM-ddTHH:mmZ), in the Oozie's processing timezone, i.e. 1997-07-16T19:20Z
这似乎与您得到的非常一致。
如果您愿意,您可以将 coord:nominalTime()
格式化为秒,但是 在协调器 中 - 因此您必须将结果填充到 <configuration>
属性 将其转发到工作流脚本。
而 AFAIK coord:actualTime()
指的是 non-deterministic 时间,在过去,当协调器开始考虑其下一个工作流实例时。想不到有什么用
顺便说一句,我没听懂 "what [you] are actually trying to do" ;如果您想要的只是为您的操作生成唯一的 ID,您有很多方法可以做到这一点,而无需依赖 Oozie 速度慢并且不会在同一秒内执行多个操作这一事实。