【问题标题】:oozie dataset timezone offset not workingoozie 数据集时区偏移不起作用
【发布时间】:2016-04-11 01:30:21
【问题描述】:

我在开始之前创建了一个依赖于数据集的 Oozie 协调器。正如我们在澳大利亚一样,我将时区偏移设置为墨尔本,并将数据频率设置为 10 分钟。

我厌倦了让 tzoffSet() EL 函数返回澳大利亚时区偏移量,但输入数据集仍然是 UTC 时间。

下面是协调器的定义

 <coordinator-app name="My_Coordinator55"
  frequency="0,10,20,30,40,50 * * * *"
  start="${start_date}" end="${end_date}" timezone="Australia/Sydney"
  xmlns="uri:oozie:coordinator:0.2"
  >
  <controls>
    <execution>FIFO</execution>
  </controls>
  <datasets>
    <dataset name="inputpath" frequency="${coord:minutes(10)}"
             initial-instance="2016-04-08T04:00Z" timezone="Australia/Melbourne">
      <uri-template>${nameNode}/user/hive/warehouse/InputDir${YEAR}${MONTH}${DAY}${HOUR}${MINUTE}</uri-template>
      <done-flag></done-flag>
    </dataset>
  </datasets>
  <input-events>
    <data-in name="inputpath" dataset="inputpath">
      <instance>${coord:current(coord:tzOffset()/10)}</instance>
    </data-in>
  </input-events>
  <action>
    <workflow>
      <app-path>${wf_application_path}</app-path>
      <configuration>
          <property>
            <name>inputpath</name>
            <value>${coord:dataIn('inputpath')}</value>
          </property>
        <property>
          <name>tablename</name>
          <value>Output${coord:formatTime( coord:dateTzOffset(coord:nominalTime(), &quot;Australia/Melbourne&quot;), &#39;yyyyMMddHHmm&#39;)}</value>
        </property>
        <property>
          <name>oozie.use.system.libpath</name>
          <value>True</value>
        </property>
        <property>
          <name>start_date</name>
          <value>2016-04-08T04:00Z</value>
        </property>
        <property>
          <name>end_date</name>
          <value>2016-10-15T23:14Z</value>
        </property>
      </configuration>
   </workflow>
  </action>
</coordinator-app>

下面是我运行协调器时的结果。标称时间 2016-04-08 14:00(墨尔本时间)正在查看 2016-04-08 04:00(-10 小时,这是 UTC 时间)虽然我有

<instance>${coord:current(coord:tzOffset()/10)}</instance>

Scheduled workflows and required inputs

【问题讨论】:

    标签: hadoop dataset scheduling oozie


    【解决方案1】:

    我终于找到了答案,所以只是发布来帮助 Oozie 的下一个时区夏令时受害者。

    当您在 Oozie 中定义 tzOffset() [注意字母的大小写时,还有另一个大写 T 函数不适用于数据集] 函数,它计算数据集和工作流时区之间的时区差异。所以这里的 EL 函数返回墨尔本(AEST TZ)和墨尔本之间的 0 差异!

      <instance>${coord:current(coord:tzOffset()/10)}</instance>
    

    所以诀窍是将数据集的时区设置为 UTC,将协调器(工作流程)的时区设置为实际时间,如果您使用它来自动执行夏令时时差。

    注意:我正在使用这种方法来帮助自动更改夏令时。 Winter 中的函数返回 -600,Summer 中返回 -660。并且使用除以 10 是因为数据集的频率设置为 10 分钟。

    【讨论】:

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