hadoop - 将 Oozie 协调器的运行日期传播到工作流程中

标签 hadoop oozie oozie-coordinator

问题摘要

运行 Oozie 协调器时,我需要工作流程能够以 yyyyMMdd 格式访问当前日期(即协调器运行的日期)。

信息

我有一个由协调员初始化的大型 Oozie 工作流程。

coord.properties

nameNode=<namenode>
jobTracker=<jobtracker>:8050

queueName=default
oozie.use.system.libpath=true
oozie.libpath=${nameNode}/project/workflow/lib
oozie.coord.application.path=${nameNode}/project/workflow

coordinator.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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">
   <action>
      <workflow>
         <app-path>${nameNode}/project/workflow</app-path>
         <configuration>
            <property>
               <name>currentDate</name>
               <value>${coord:actualTime()}</value>
            </property>
            <property>
            <name>runDate</name>
            <value>${convertDate(currentDate,"YYYY-MM-DDTHH:mmZ","yyyyMMdd")}</value>
            </property>
         </configuration>
      </workflow>
   </action>
</coordinator-app>

当从 job.properties (即不是协调器)运行此工作流程时,我在 job.properties 中有一个 runDate=20150125 属性。显然,当从协调器运行时,我需要让协调器每天设置runDate。这看起来微不足道,但我找不到解决方案。

我已经有了 oozie.service.ELService.ext.functions.workflow 中提到的 EL 函数,它允许我给出一个表示日期的字符串、日期格式和所需的输出格式,然后返回该格式的字符串日期。即 ${convertDate("20150125", "yyyyMMdd", "yyyy-MM-dd") = 2015-01-25。当从 job.properties 运行时,此函数可以完美运行,我理想的解决方案是能够在 coordinator.xml 中使用它。但是,在提交协调员时出现以下错误:

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

最佳答案

您可能会发现使用内置 EL 函数coord:formatTime(String timeStamp, String format) 转换时间戳格式会更容易:

https://oozie.apache.org/docs/4.1.0/CoordinatorFunctionalSpec.html#a6.9.2._coord:formatTimeString_ts_String_format_EL_Function_since_Oozie_2.3.2

例如:

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

关于hadoop - 将 Oozie 协调器的运行日期传播到工作流程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232569/

相关文章:

hadoop - Amazon EMR问题

以 sysdate 作为开始时间的 Oozie 协调器

apache - 向 Oozie 工作流通知添加授权

hadoop - oozie中执行 Action 后删除hdfs路径

hadoop - 如何抑制 hadoop fs 命令的信息消息

java - 错误 Livy Spark Server hue 3.9

hadoop - 是什么导致 Hadoop 数据节点死亡?

hadoop - Oozie启动器的“Container preempted by scheduler”错误不会导致Oozie操作失败

Java MapReduce 计数器 - Oozie

hadoop - oozie 中 Hive 操作的作业队列