2016-02-15 14 views
1

我正在探索Apache Storm。我知道,没有办法确定哪些任务映射到哪个节点。我想知道是否有任何方法可以猜测哪些执行者被分组在一起。举例来说,考虑具有1个喷口和2个螺栓的直链拓扑结构:Apache Storm:将执行者分配给插槽

喷 - > Bolt1 - > Bolt2

如果有3节点的群集,和numworkers = 3,结合并行= 9(3喷嘴+ 2 x 3螺栓),有什么方法可以确定执行器如何分组?我读过,默认调度程序以循环方式均匀分配负载。这是否意味着所有工人都会有一个实例: S - > B1 - > B2执行者?

回答

1

对于默认调度程序,您是对的。如果你有3名工人,每个工人将被分配一个Spout,Bolt1和Bolt2实例。

默认调度程序为工作人员分配执行程序的顺序是循环法,正如您所述。更详细地说,在调度器考虑下一个逻辑运算符之前,每个逻辑运算符的循环分配发生在它的所有执行者身上。但是,逻辑运算符本身的顺序并不固定。请参阅此处的代码以获取更多详细信息:https://github.com/apache/storm/tree/0.9.x-branch/storm-core/src/clj/backtype/storm/scheduler

如果要影响此行为,可以提供自定义调度程序。在这里看一个例子:https://xumingming.sinaapp.com/885/twitter-storm-how-to-develop-a-pluggable-scheduler/

+0

我想那么在不同的并行性提示的情况下,在我们的例子中,1 Spout,4 Bolt1,4 Bolt2,它将是:S→B1→B2,B1 B1→B2, B1→B2 B2。在这种情况下,还是第一种情况下均匀分布的情况下,流分组是否考虑了组件的所有实例?说B1的混洗分组考虑所有的螺栓实例,即使它们在不同的物理机器上,对吧? –

+1

是的。这个任务听起来很正确。是的,像shuffle或fieldsGrouping这样的分组会考虑所有的执行者。 localOfShuffle是一个例外,它偏好本地消费者而非远程消费者。 –

相关问题