假设我们有一个 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/