Apache Storm中的调度/放置控制

问题描述 投票:0回答:1

我正在由2个节点组成的Storm集群中运行单词计数拓扑。一个节点是主节点(具有Nimbus,UI和Logviewer),然后两者都是具有1个Worker的Supervisor。换句话说,我的Master节点也是Supervisor,第二个节点只是Supervisor。正如我所说,每个主管有1名工人。

我正在使用的拓扑已配置为正在使用这2个工作线程(setNumWorkers(2))。详细而言,拓扑具有1个带有2个线程的出水口,即1个split螺栓和1个count螺栓。当我使用默认调度程序部署拓扑时,第一个Supervisor具有1个Spout线程和split Bolt,第二个Supervisor具有1个Spout线程和count Bolt。

在这种情况下,我如何控制这2个Worker之间的operator(Spout / Bolt)放置?出于研究目的,我需要对这些运算符在节点之间的位置进行一些控制。但是,该机制在Storm中似乎是透明的,并且最终用户无法使用这种控件。

我希望我的问题足够清楚。随时询问其他详细信息。我知道我可能需要深入研究Storm的源代码并重新编译。没关系。我正在寻找出发点和有关如何进行的建议。

我使用的Storm版本是2.1.0。

apache-storm
1个回答
1
投票

调度由Storm中的可插入调度程序处理。请参阅http://storm.apache.org/releases/2.1.0/Storm-Scheduler.html中的文档。

您可能想看一下DefaultScheduler作为参考https://github.com/apache/storm/blob/v2.1.0/storm-server/src/main/java/org/apache/storm/scheduler/DefaultScheduler.java。这是Storm使用的默认调度程序,并且有一些处理措施可以禁止“不好的”工作人员执行任务,但是在其他情况下,它只会进行循环任务。

如果您不想实现群集范围的调度程序,则可以将群集设置为使用ResourceAwareScheduler,而改为使用拓扑级别的调度策略。提交拓扑时,可以通过设置config.setTopologyStrategy(YourStrategyHere.class)进行设置。您将需要实现此接口https://github.com/apache/storm/blob/e909b3d604367e7c47c3bbf3ec8e7f6b672ff778/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/IStrategy.java#L43,并且可以在https://github.com/apache/storm/blob/c427119f24bc0b14f81706ab4ad03404aa85aede/storm-server/src/main/java/org/apache/storm/scheduler/resource/strategies/scheduling/DefaultResourceAwareStrategy.java中找到示例实现。

编辑:如果您实现IStrategyIScheduler,则它们需要放入您在Nimbus机器上的storm/lib中放入的一个jar。策略或调度程序必须位于Nimbus进程的类路径上。

© www.soinside.com 2019 - 2024. All rights reserved.