Apache风暴在不同的机器上执行螺栓(指定节点)

时间:2015-02-22 11:21:09

标签: python-2.7 apache-storm

我想创建一个拓扑,其中一个喷口出现单词,一个基于这些单词的螺栓创建一个用word命名的目录。

我有两个管理程序节点,并希望如果单词以“a”开头“l”,则在一个节点和另一个节点上创建目录。 例如,如果word是'acknowledge',那么将在一个节点上创建一个目录,如果word是“machine”,那么将在另一个节点上创建目录。

请建议一种配置风暴来实现此目的的方法。

我还想知道一个螺栓是否足够,或者如果部署了两个螺栓,怎么能管理一个螺栓在一台机器上运行而另一个螺栓在另一台机器上运行。

P.S。我正在使用Pyleus(https://github.com/Yelp/pyleus)来创建螺栓和喷口。

2 个答案:

答案 0 :(得分:0)

您可以使用单个螺栓但只使用它的两个实例。此bolt的每个实例都运行每个supervisor节点。使用自定义字段分组功能来实现相同功能。您的自定义字段分组逻辑决定此单词必须分派的螺栓实例。

答案 1 :(得分:0)

基本上,您无法确定特定工作人员(JVM)中是否存在Bolt / Spout。它是Storm设计的一部分:让工作人员使用与Storm类似的不同硬件决定哪个螺栓/喷口实例进入哪个工人。

Storm包含一个抽象:拓扑不依赖于集群,可以在运行时重新平衡。它具有极好的弹性和高性能,但您无法轻松制作在特定节点上运行的特定代码(在风暴哲学中它也是一种反模式)。

AFAIK Storm使用mod哈希函数来重新分配工作人员中的任务/执行者(由主管管理),并且您无法轻易覆盖它。

因此,最好的办法是让任务> =执行者> =工作人员,因为风暴会试图平均分配集群工人的负担。