如何在oozie协调器中使用一天的旧数据集

时间:2015-09-16 03:53:48

标签: hadoop dataset workflow oozie

我正在寻找实现以下目标的正确方法:

情景:

  1. 连接器正在为数据提供数据,并且它正在hdfs中的路径/data/2015/09/15/csvfile.csv处存储。 (明天存放)

  2. 我的协调员工作在当天结束时在2015-09-15T23:59运行,并使用上述路径中的当天数据并将其存储到分区day = 16下的hive表中

  3. 基本上我想让每个分区保存最后一天的数据,如果数据可用,如果数据不可用则不应该创建分区。

    例如
    收集的第15个数据应该类似地存储到分区16中 第16个数据分为第17个分区等等。

    假设从2015-09-15T00:00开始喂食,直到2015-09-16T00:00,这一天已满,并存储在路径/data/2015/09/15/file.csv

    协调器作业在2015-09-15T23:59处实现,它应该使用/data/2015/09/15/file.csv路径中的数据并将其作为输入传递给协调器操作。

    以下是我使用的oozie协调程序文件正在运行,但是当协调员没有特定日期可用的数据时,它没有给出预期的输出。

    协调员xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <coordinator-app name="App" frequency=1440 start=2015-09-15T23:59Z end=2015-09-30T23:59Z timezone="UTC" xmlns="uri:oozie:coordinator:0.4">
      <datasets>
        <dataset name="logs" frequency=1440 initial-instance=2015-09-15T23:59Z timezone="UTC">
            <uri-template>${DataPath}/${YEAR}/${MONTH}/${DAY}</uri-template>
            <done-flag>file.csv</done-flag>
        </dataset>
      </datasets>
      <input-events>
        <data-in name="isready_logs" dataset="logs">
            <instance>${coord:current(0)}</instance>
        </data-in>
      </input-events>
      <action>
        <workflow>
          <app-path>${ApplicationPath}/log_wf.xml</app-path>
          <configuration>
                <property>
                    <name>currentday</name>
                    <value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), 1, 'DAY'), 'dd')}</value>
                </property>
                <property>
                    <name>currentmonth</name>
                    <value>${coord:formatTime(coord:nominalTime(), 'MM')}</value>
                </property>
                <property>
                    <name>currentyear</name>
                    <value>${coord:formatTime(coord:nominalTime(), 'yyyy')}</value>
                </property>
                <property>
                  <name>input</name>
                  <value>${coord:dataIn('isready_logs')}</value>
                </property>
                <property>
                    <name>ScriptPath</name>
                    <value>${ApplicationPath}</value>
                </property>
                <property>
                    <name>XmlPath</name>
                    <value>${ApplicationPath}</value>
                </property>
          </configuration>
        </workflow>
      </action>
    </coordinator-app>
    

    您能指导我使用正确的值配置协调器吗?

    提前致谢。

1 个答案:

答案 0 :(得分:0)

您的偏移量加一天,但仅限于当天,而不是当前年份或当前月份。

这意味着,对于在2015-09-15T23:59处实现的协调员作业,日期将为2015-09-16。但对于在2015-12-31T23:59实现的协调员工作,该日期将为2015-12-01`

如果您想使用偏移量,则应将该偏移量添加到月份和年份,否则它将在月末和年末计算错误的日期。

<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), 1, 'DAY'), 'dd')}</value>
...
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), 1, 'DAY'), 'MM')}</value>
...
<value>${coord:formatTime(coord:dateOffset(coord:nominalTime(), 1, 'DAY'), 'yyyy')}</value>