我注意到,如果我在当前时间之前启动一个Oozie协调器的启动时间为多个“迭代”(就频率而言),那么协调器将连续运行几次工作流,而忽略指定的频率。然而,对我来说,工作流/动作以指定的频率运行比工作流/动作在给定的时间点运行正确次数更重要。
有什么办法可以避免这种行为吗?显然,一种方法是确保在迭代时间内开始时间是正确的(是否有一种方法可以让它自动获得开始时间)。另一种方法是将其配置为完全避免这种行为,并且在下一次它应该给出启动时间和频率时基本运行。
发布于 2015-08-05 20:41:58
避免“过去”开始约会的副作用的明显方法是.将提交时的实际开始日期设置为“立即”。
我的团队就是这么做的:
元原语:如果您使用的是“基本”频率(而不是类似CRON的调度),您可能希望尝试这些方法,让Oozie为所有“过去”时隙创建执行程序,但立即丢弃它们:
<throttle>1</throttle>和/或
<execution>LAST_ONLY</execution>请参阅Oozie 4.x参考
如果协调员被暂停然后恢复工作,或者Oozie服务被停止然后重新启动,或者纱线不得不在相当长的时间内排队等待新的工作(因为集群100%繁忙),这些规则也适用。
发布于 2016-08-10 23:13:28
Oozie最近有所改进,因此有一个比当前接受的答案更简单的解决方案。在Oozie 4.1中,有一个“无”的执行。这或多或少地跳过了过去发生的迭代。这是医生的片段:
NONE:与LAST_ONLY相似,只是跳过了所有旧的物化。当未设置任何操作时,当当前时间超过操作的正常时间时,将跳过正在等待或准备的操作。默认情况下,阈值为1分钟。例如,假设操作1和2都在等待,当前时间是下午5:20,而两个操作的标称时间都在下午5:19之前。这两个操作都将被跳过,假设它们在此之前不会转换到提交(或终端状态)。考虑这一点的另一种方法是将超时设置为等于1分钟(这是最小的时间单位),但跳过的状态不会导致协调任务最终变为DONEWITHERROR,而且实际上可以成功(即它是TIMEDOUT的“好”版本)。
我对此进行了测试,它确实适用于CRON频率。在您的情况下,它优于LAST_ONLY执行,因为除了当前/未来的迭代之外,LAST_ONLY还将在过去运行最近的迭代(使用错误对齐的时间)。
<execution>NONE</execution>https://stackoverflow.com/questions/31833273
复制相似问题