是否可以限制同时运行的oozie工作流程的数量?

时间:2018-02-12 23:14:51

标签: yarn oozie cloudera-cdh

docs我不清楚这一点。这是我们的场景,以及为什么我们尽可能简洁地需要这个:

我们有60名协调员正在运行,通常每小时启动一次工作流程,其中一些工作流程具有子工作流程(多个并行工作流程)。这适用于在任何给定时间运行的大约40个工作流程。但是,当群集负载不足或某些底层服务很慢(例如impala或hbase)时,工作流程将比平时运行更长时间并备份,因此我们最终可能会运行80多个工作流程(包括子工作流程)。

这有时会导致所有工作流无限期挂起,因为我们只有足够的内存和核心分配给此池,oozie可以启动启动器作业(即oozie:launcher:T=sqoop:W=JobABC:A=sqoop-d596:ID=XYZ),但不会启动相应的操作(即{{1 }})。

我们可以简单地为池分配足够的资源以适应这些峰值,但这将是一个巨大的浪费(其他池/租户永远不会使用的数百个核心和GB)。

所以我试图对运行的工作流程数施加一些限制,即使这意味着某些工作流程有时会落后。顺便说一下,我们所有的协调员都配置了执行= LAST_ONLY,任何延迟的工作流程都会在下次运行时完全赶上。我们在CDO 5.13上使用Oozie 4.1;使用DRF调度程序设置池。

提前感谢您的想法。

1 个答案:

答案 0 :(得分:0)

AFAIK没有配置参数可让您控制在给定时间运行的工作流程数。

如果您的协调员计划大约在同一时间窗口中运行,您可以考虑在一个协调器/工作流中折叠它们,并使用fork / join控制节点来控制并行度。因此,您可以在工作流中的K个队列中分发操作,这将确保您不会同时运行多个K操作,从而限制群集上的负载。 我们使用脚本自动生成工作流内的fork队列并分发操作(当然这仅适用于可以并行运行的操作,即没有数据依赖性等)。

希望这有帮助