Hadoop oozie数据集时区偏移不工作

Hadoop oozie数据集时区偏移不工作,hadoop,dataset,scheduling,oozie,Hadoop,Dataset,Scheduling,Oozie,我已经创建了一个Oozie协调器,它在启动之前依赖于一个数据集。由于我们在澳大利亚,我将时区偏移设置为墨尔本,数据频率设置为10分钟 我很想让tzoffSet()EL函数返回澳大利亚时区偏移,但输入数据集仍然是UTC时间 以下是协调员的定义 <coordinator-app name="My_Coordinator55" frequency="0,10,20,30,40,50 * * * *" start="${start_date}" end="${end_date}" tim

我已经创建了一个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>

先进先出
${nameNode}/user/hive/warehouse/InputDir${YEAR}${MONTH}${DAY}${HOUR}${MINUTE}
${coord:current(coord:tzOffset()/10)}

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

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

  <instance>${coord:current(coord:tzOffset()/10)}</instance>
${coord:current(coord:tzOffset()/10)}
因此,诀窍是将dataset的时区设置为UTC,而将coordinator(工作流)的时区设置为实际时间(如果您将此用于自动化夏时制时差)

注意:我使用此方法来帮助实现日光节约时间更改的自动化。函数在冬季返回-600,在夏季返回-660。由于数据集的频率设置为10分钟,所以使用了除以10的方法

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