将oozie协调器的运行日期传播到工作流中

iezvtpos  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(421)

问题摘要
当运行oozie协调器时,我需要工作流能够访问格式为的当前日期(即协调器运行的日期) yyyyMMdd .
信息
我有一个很大的oozie工作流,它是由一个协调员初始化的。
坐标属性

  1. nameNode=<namenode>
  2. jobTracker=<jobtracker>:8050
  3. queueName=default
  4. oozie.use.system.libpath=true
  5. oozie.libpath=${nameNode}/project/workflow/lib
  6. oozie.coord.application.path=${nameNode}/project/workflow

协调器.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <coordinator-app xmlns="uri:oozie:coordinator:0.1" name="wf_scheduler" frequency="${coord:days(1)}" start="2015-01-30T08:50Z" end="2017-01-30T05:00Z" timezone="UTC">
  3. <action>
  4. <workflow>
  5. <app-path>${nameNode}/project/workflow</app-path>
  6. <configuration>
  7. <property>
  8. <name>currentDate</name>
  9. <value>${coord:actualTime()}</value>
  10. </property>
  11. <property>
  12. <name>runDate</name>
  13. <value>${convertDate(currentDate,"YYYY-MM-DDTHH:mmZ","yyyyMMdd")}</value>
  14. </property>
  15. </configuration>
  16. </workflow>
  17. </action>
  18. </coordinator-app>

从运行此工作流时 job.properties (即不是协调员),我有 runDate=20150125 中的属性 job.properties . 显然,当我从一个协调员那里跑出来的时候,我需要 runDate 每天由协调员设定。这看起来微不足道,但我找不到解决办法。
我已经有一个el函数在 oozie.service.ELService.ext.functions.workflow 它允许我给出一个表示日期、日期格式和所需输出格式的字符串,然后以该格式返回字符串日期。即。 ${convertDate("20150125", "yyyyMMdd", "yyyy-MM-dd") = 2015-01-25 . 此函数在从 job.properties 我的理想解决方案是能够在coordinator.xml中使用它。但是,在提交协调器时出现以下错误:

  1. Error: E1004 : E1004: Expression language evaluation error, Unable to evaluate :${convertDate(currentDate,"YYYY-MM-DDTHH:mmZ","yyyyMMdd")}:
inkz8wg9

inkz8wg91#

您可能会发现使用内置el函数更容易 coord:formatTime(String timeStamp, String format) 要转换时间戳格式:
https://oozie.apache.org/docs/4.1.0/coordinatorfunctionalspec.html#a6.9.2._coord:formattimestring\u ts\u string\u format\u el\u function\u since\u oozie\u 2.3.2
例如:

  1. ${coord:formatTime(coord:actualTime(), "yyyyMMdd")}

相关问题