【问题标题】:Is it possible to limit number of oozie workflows running at the same time?是否可以限制同时运行的 oozie 工作流的数量?
【发布时间】:2018-07-23 06:01:50
【问题描述】:

docs 对我来说不是很清楚。这是我们的场景以及为什么我们需要尽可能简洁:

我们有 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)。

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

提前感谢您的想法。

【问题讨论】:

标签: hadoop-yarn oozie cloudera-cdh


【解决方案1】:

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

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多