我们假设我们有一个Oozie工作流,它有一个复制操作节点,然后是一个Shell操作节点。我可以启动这样一个OOzie工作流的多个实例并并行运行吗?并发数量如何达到数千和/或甚至数百万的水平。这是可能的,甚至Oozie是否支持高级并发?
如果没有,那么我们将不得不考虑限制并对可以有多少并发Oozie工作流实例设置上限。我们更喜欢在服务器/ Oozie端(基本上使用任何开箱即用的Oozie软件功能)限制它,而不是在客户端/被叫方端。例如,我们有一个巨大的启动脚本,其中包含这样的行。我们希望一次性运行它,然后让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
答案 0 :(得分:6)
由于Shell操作由one-mapper-zero-reducer MR作业运行,因此无法获得比集群上的映射插槽数更高的Oozie工作流并发性。
如果您有许多工作流实例,那么最好的机制是使用Oozie协调器。这将跟踪每个实例的完成情况并轻松管理并发性。 Oozie协调器有一个<concurrency>
标记,用于控制工作流的并行执行的实例数,以及一个<throttle>
标记,用于控制在有一个实体的自由并发之前有多少实例进入等待状态开始。
请注意,Oozie协调器的默认行为是在每次轮询是否应创建新实例之间等待5分钟。如果您的工作流程在不到5分钟的时间内运行,那么该过程将在此时间间隔内出现瓶颈。您可以使用oozie.service.CoordMaterializeTriggerService.lookup.interval
文件中的oozie-site.xml
属性(以秒为单位)更改此设置。