hadoop - 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}" 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年4月8日14:00(墨尔本时间)的标称时间(墨尔本时间)正在查看2016年4月8日04:00(UTC时间为-10小时)
<instance>${coord:current(coord:tzOffset()/10)}</instance>

Scheduled workflows and required inputs

最佳答案

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

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

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

因此,技巧是将数据集的时区设置为UTC,将协调器(工作流)的时区设置为实际时间(如果您要使用该时区来自动实现夏令时差)。

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

关于hadoop - oozie数据集时区偏移不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36538469/

相关文章:

hadoop - Hadoop集群的动态IP

java - 错误 : java. lang.NumberFormatException:对于输入字符串: "time"

c# - 使用 LINQ 在两个表之间选择不同的值

algorithm - 拓扑排序算法

java - ScheduledThreadPoolExecutor 迟到了

docker - Hadoop在不使用IP的情况下无法访问数据节点

hadoop - 当我设置 Hadoop 时,*底层* 文件系统需要哪些权限?

r - 根据字符串的第一个字母对 R 中的类别进行分组?

jquery - 如何获取数据集值

ruby-on-rails - Ruby rufus 调度程序 gem