【发布时间】: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 调度程序设置池。
提前感谢您的想法。
【问题讨论】:
-
启动器作业的不同队列怎么样,对可用资源匹配有硬性限制,例如30*2 容器(AM+mapper),对于衍生的 YARN 作业,资源更多?
标签: hadoop-yarn oozie cloudera-cdh