【问题标题】:Oozie Custom EL function oozie for coordinatorOozie 自定义 EL 函数 oozie for coordinator
【发布时间】:2017-12-03 19:01:20
【问题描述】:

我想创建一个自定义 el 函数,我将在 oozie 协调器中使用它。我的自定义 el 函数工作正常,但是当我将已定义的 oozie el 函数作为参数传递给我的 el 函数时,它会引发异常。

coordinator.xml

${coord:dateToEpoch(coord:nominalTime(), "yyyy-MM-dd'T'hh:mmZ") 见下例

<datasets>
    <dataset name="input1" frequency="${inputDataSetFrequence}" initial-instance="${initialInstance}"
             timezone="${timezone}">
        <uri-template>${inputBasePath}/${useCaseName}/bintime=${coord:dateToEpoch(coord:nominalTime(),  "yyyy-MM-dd'T'hh:mmZ")}
        </uri-template>
        <done-flag></done-flag>
    </dataset>
</datasets>
<input-events>
    <data-in name="coordInput1" dataset="input1">
        <instance>${coord:current(0)}</instance>
    </data-in>
</input-events>

我用来测试的配置

<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-nofuncs</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>

常量参数有效但动态参数无效

工作电话

${coord:dateToEpoch("2009-01-01T08:00UTC", "yyyy-MM-dd'T'hh:mmZ")

异常调用

${coord:dateToEpoch(coord:nominalTime(), "yyyy-MM-dd'T'hh:mmZ")

尝试使用所有这些属性

    <property>
<name>oozie.service.ELService.ext.functions.job-submit</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.workflow</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.wf-sla-submit</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-freq</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-data</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-instances</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-sla-create</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-sla-submit</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-action-create</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-action-create-inst</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-action-start</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-job-wait-timeout</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.bundle-submit</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>
<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-initial-instance</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>

<property>
<name>oozie.service.ELService.ext.functions.coord-job-submit-nofuncs</name>
<value>coord:dateToEpoch=com.mobileum.oozie.MobileumELFunctions#dateToEpoch</value>
</property>

例外

Caused by: java.lang.Exception: Unable to evaluate :${inputBasePath}/${useCaseName}/bintime=${coord:dateToEpoch(coord:nominalTime(),  "yyyy-MM-dd'T'hh:mmZ")}:

    at org.apache.oozie.coord.CoordELFunctions.evalAndWrap(CoordELFunctions.java:743)
    at org.apache.oozie.command.coord.CoordSubmitXCommand.resolveTagContents(CoordSubmitXCommand.java:1002)
    ... 37 more
Caused by: javax.servlet.jsp.el.ELException: No function is mapped to the name "coord:nominalTime"
    at org.apache.commons.el.Logger.logError(Logger.java:481)
    at org.apache.commons.el.Logger.logError(Logger.java:498)
    at org.apache.commons.el.Logger.logError(Logger.java:525)
    at org.apache.commons.el.FunctionInvocation.evaluate(FunctionInvocation.java:150)
    at org.apache.commons.el.FunctionInvocation.evaluate(FunctionInvocation.java:163)
    at org.apache.commons.el.ExpressionString.evaluate(ExpressionString.java:114)
    at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:274)
    at org.apache.commons.el.ExpressionEvaluatorImpl.evaluate(ExpressionEvaluatorImpl.java:190)
    at org.apache.oozie.util.ELEvaluator.evaluate(ELEvaluator.java:204)
    at org.apache.oozie.coord.CoordELFunctions.evalAndWrap(CoordELFunctions.java:734)

【问题讨论】:

    标签: oozie oozie-coordinator


    【解决方案1】:

    并非所有Oozie EL 构造都在uri-template 中进行评估。详情请参阅Synchronous Datasets 部分。以下是uri-template的摘录:

    uri-template:标识数据集的URI模板,可以是 解析为具体的 URI 以识别特定的数据集实例。 URI 模板的构造使用:

    常数:请参阅下面允许的 EL 时间常数。例如:${YEAR}/${MONTH}。

    变量:必须在将协调器作业提交给协调器引擎时解析变量。它们通常被提供一个作业参数(配置属性)。例如:${market}/${language}

    以下 EL 常量可在同步数据集 URI 模板中使用:

    • 年份
    • 小时
    • 分钟

    问题与您的自定义 EL 函数实现无关。因此,即使您使用了以下内容,它也不起作用:

    <uri-template>${inputBasePath}/${useCaseName}/bintime=${coord:nominalTime()}</uri-template>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多