我从文档中尚不清楚。这是我们的情况,也是为什么我们尽可能简洁地需要它:
我们正在运行60个协调员,通常每小时启动工作流,其中一些具有子工作流程(有些并行(。这可以在任何给定时间运行大约40个工作流程。但是,当集群处于负载下或一些基础服务的速度时(例如Impala或HBase(时,工作流程将比平常更长并备份,因此我们可以运行80多个工作流程(包括子工作流程(。
>这有时会导致所有工作流无限期地悬挂,因为我们只有足够的内存和分配给该池的核心,使Oozie可以启动启动器作业(即oozie:launcher:T=sqoop:W=JobABC:A=sqoop-d596:ID=XYZ
(,但不能启动其相应的操作(即oozie:action:T=sqoop:W=JobABC:A=sqoop-d596:ID=XYZ
(。
我们可以简单地将足够的资源分配给游泳池以适应这些尖峰,但这将是巨大的废物(其他游泳池/租户永远无法使用的数百个核心和GB(。
因此,我试图对运行的工作流数量进行一些限制,即使这意味着有时会在后面运行。顺便说一句,我们所有的协调员都配置了执行= last_only,并且任何延迟的工作流程都将在下一次运行中完全赶上。我们在CDH 5.13上使用Oozie 4.1;池是使用DRF调度程序设置的。
事先感谢您的想法。
afaik没有配置参数可以让您控制在给定时间运行的工作流量。
如果您的协调员计划在同一时间窗口中大约运行,则您可能会认为仅在一个协调器/工作流程中折叠它们,并使用叉子/联接控制节点来控制并行性的程度。因此,您可以在工作流程中的k个队列中分发操作,这将确保您不会同时运行的K操作,从而限制了集群上的负载。我们使用脚本自动生成工作流程中的叉队队列并分发操作(当然,这仅适用于可以并行运行的操作,即没有数据依赖项等(。
。希望这有帮助