我正在寻找实现以下目标的正确途径:
场景:
/data/2015/09/15/csvfile.csv中存储数据。(储存日)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>你能引导我用正确的值来配置协调器吗?
提前谢谢。
发布于 2016-03-30 10:43:52
您有一个偏移加一天,但仅在当前一天,而不是在当前年份或当前月份。
这意味着,对于在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>https://stackoverflow.com/questions/32599482
复制相似问题