并发运行 Oozie 工作流 : how many and how to throttle

标签 concurrency oozie throttling

假设我们有一个 Oozie 工作流,它有一个复制操作节点,然后是一个 Shell 操作节点。我可以启动此类 OOzie 工作流的多个实例并并行运行它们吗?并发数可能会飙升至数千甚至数百万级别。这可能吗,甚至 Oozie 支持这种高级并发?

如果没有,那么我们将不得不考虑限制并强制限制并发 Oozie 工作流实例的数量。我们更愿意在服务器/Oozie 端(基本上使用任何开箱即用的 Oozie 软件功能)进行 throttle ,而不是在客户端/被调用端。例如,我们有一个像这样的行的巨大启动脚本。我们想一次性运行它,然后让 Oozie 找出如何自行限制所有这些实例。我们不想把它分成多个更小的块,然后一次开始一个块。

oozie job -oozie http://myhost.com:11000/oozie -config job1.properties -run
oozie job -oozie http://myhost.com:11000/oozie -config job2.properties -run
......
oozie job -oozie http://myhost.com:11000/oozie -config job1000000.properties -run

最佳答案

您将无法拥有比集群上的映射槽数更高的 Oozie 工作流并发性,因为 Shell 操作由单映射器零还原器 MR 作业运行。

如果您有许多工作流实例需要处理,那么最好的机制是使用 Oozie 协调器。这将跟踪每个实例的完成情况并轻松管理并发性。 Oozie 协调器有一个 <concurrency>控制并行执行的工作流实例数量的标记,以及 <throttle>控制有多少实例进入等待状态,然后才有空闲并发开始。

见:https://oozie.apache.org/docs/3.1.3-incubating/CoordinatorFunctionalSpec.html#a6.3._Synchronous_Coordinator_Application_Definition

请注意,Oozie 协调器的默认行为是在每次轮询是否应创建新实例之间等待 5 分钟。如果您的工作流在不到 5 分钟的时间内运行,则该过程将在此时间间隔内出现瓶颈。您可以使用 oozie.service.CoordMaterializeTriggerService.lookup.interval 更改此设置您的 oozie-site.xml 中的属性(以秒为单位)文件。

关于并发运行 Oozie 工作流 : how many and how to throttle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612138/

相关文章:

hadoop - 在 Oozie 中将作业调度为文件触发器

javascript - 如何在每个调用堆栈中只调用一次函数?

dart - dart 中的 throttle 函数执行

memory - 为什么使用单独的线程原子操作更快?

c# - 两个线程之间的共享变量与共享属性的行为不同

go - 在监视器 goroutine 中递归发送

hadoop - oozie REST api POST 新配置单元作业获取 "This request requires HTTP authentication."

hadoop - 在实际运行oozie工作流之前如何检测错误?

c# - 如何适当限制多线程应用程序?

syntax - `move ||` 成语的目的是什么?