如何在oozie coordinator中使用一天的旧数据集

ycggw6v2  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(389)

我正在寻找实现以下目标的正确方法:
脚本:
连接器正在传送数据,数据正在路径上存储 /data/2015/09/15/csvfile.csv 在hdfs中((按天计算)
我的协调器作业是在2015-09-15t23:59运行的,在一天结束的时候,使用来自上述路径的当天数据,并将其存储到分区下的配置单元表中 day = 16 .
基本上我想让每个分区保存最后一天的数据,如果数据可用,如果数据不可用,那么就不应该创建分区。
例如
收集到的第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>

你能告诉我配置协调器的值是否正确吗?
提前谢谢。

ztmd8pv5

ztmd8pv51#

您有一个加上一天的偏移量,但只在当前日期,而不是当前年份或当前月份。
这意味着协调器作业在 2015-09-15T23:59 日期是 2015-09-16 . 但协调人的工作在 2015-12-31T23:59 日期为2015年12月1日`
如果要使用偏移量,应将该偏移量添加到月份和年份中,否则会在月末和年末计算错误的日期。

<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>

相关问题