如何配置Oozie Coordinator确保同一时间仅运行单个实例?
实现Oozie Coordinator单实例运行的配置方案
当然可以实现!你只需要在coordinator.xml里配置几个关键属性,就能确保你的Coordinator同一时间只会运行一个实例,完全满足“前一个实例完成后再启动下一个”的需求。
核心配置步骤
1. 设置concurrency属性为1
这个属性直接控制Coordinator允许同时运行的最大实例数量,将它设为1就能严格限制同一时间只能有一个实例在执行。
把它添加到coordinator-app下的controls节点中:
<coordinator-app name="your-coordinator-name" frequency="${coord:minutes(30)}" start="${start_time}" end="${end_time}" timezone="UTC" xmlns="uri:oozie:coordinator:0.4"> <controls> <!-- 限制并发实例数为1 --> <concurrency>1</concurrency> </controls> <!-- 你的dataset、workflow action等其他配置 --> </coordinator-app>
2. 配合execution属性优化执行顺序(推荐)
execution属性决定了当有多个等待执行的实例时,Coordinator的处理策略,有两个可选值:
FIFO:按照调度时间的先后顺序依次执行,完美匹配你“等待前一个完成再启动下一个”的需求LAST_ONLY:只执行最新的等待实例,跳过中间积压的任务(适合不需要处理所有历史调度的场景)
将它和concurrency一起配置:
<controls> <concurrency>1</concurrency> <execution>FIFO</execution> </controls>
效果说明
配置完成后,如果某次Workflow执行耗时超过30分钟,到了下一个调度时间点时,Coordinator会检测到当前已有运行中的实例(因为concurrency=1),就会让新的调度实例进入等待队列。直到前一个实例执行完成,队列中的下一个实例才会被启动执行。
内容的提问来源于stack exchange,提问作者Chandan Bhattad
相关产品推荐
相关产品推荐

