在每小时的5分钟标记处,我将过去一小时的数据加载到hdfs中。我以为我可以设置一个协调器作业,以每小时10分钟的速度运行来处理这些数据,同时检查该小时的目录是否存在。最终发生的事情是协调员将在提交时对过去一小时的数据进行正常处理,在接下来的2个小时内继续正常工作,然后未来的行动将从等待'到了&time;时间'我的猜测是,某个操作可以保持等待的时间有一个默认的最大限制。对于在绝对未来时间应用于所有操作的超时限制似乎有点违反直觉。无论如何,这里是coordinator.xml的一个示例。我正在寻找关于如何以更有意义的方式设计它或如何提高默认超时的任何建议。
<datasets>
<dataset name="hourly_cl" frequency="${coord:hours(1)}" initial-instance="2016-02-08T11:10Z" timezone="PST">
<uri-template>hdfs://user/tzl/warehouse/incoming/logmessages.log.${YEAR}${MONTH}${DAY}/${HOUR}/</uri-template>
<done-flag></done-flag>
</dataset>
<dataset name="hourly_cl_out" frequency="${coord:hours(1)}" initial-instance="2016-02-05T11:10Z" timezone="PST">
<uri-template>hdfs://user/tzl/warehouse/output/logmessages.log.${YEAR}${MONTH}${DAY}/${HOUR}/</uri-template>
<done-flag></done-flag>
</dataset>
</datasets>
<input-events>
<data-in name="coordInput1" dataset="hourly_cl">
<instance>${coord:current(-1)}</instance>
</data-in>
</input-events>
<output-events>
<data-out name="clout" dataset="hourly_cl_out">
<instance>${coord:current(-1)}</instance>
</data-out>
</output-events>
<action>
<workflow>
<app-path>${appPath}</app-path>
<configuration>
<property>
<name>inputPath</name>
<value>${coord:dataIn('coordInput1')}</value>
</property>
<property>
<name>outputPath</name>
<value>${coord:dataOut('clout')}</value>
</property>
</configuration>
</workflow>
</action>
在查看oozie检查每个数据目录每分钟的日志时也注意到了。换句话说,在18:01,它会检查这些是否存在 logmessages.log.20160208 / 18
logmessages.log.20160208 / 19
logmessages.log.20160208 / 20
logmessages.log.20160208 / 21
...
并在18:02再次检查 logmessages.log.20160208 / 18
logmessages.log.20160208 / 19
logmessages.log.20160208 / 20
logmessages.log.20160208 / 21
...
这可能会占用不必要的cpu周期。我假设通过将频率设置为一小时,当我将实例定义为过去一小时的数据:当前(-1)
答案 0 :(得分:1)
我通过简单的属性调整解决了这个问题。通过在coordinator-app下引入它
<coordinator-app name="cl_test" frequency="${coord:hours(1)}" start="..." end="..." timezone="PST" xmlns="uri:oozie:coordinator:0.2">
<controls>
<timeout>1440</timeout>
<concurrency>2</concurrency>
<throttle>1</throttle>
</controls>
...
...
</coordinator-app>
具体来说,<throttle>
属性限制了可以将多少操作置于等待状态。因此,通过将其设置为1,超时时间仅适用于处于“等待”状态的下一个操作。 <timeout>
也会更改“等待”操作的超时限制,而我相信<concurrency>
会限制一次可以运行的操作数。