如何在Storm中实现此拓扑?

时间:2014-08-08 15:17:24

标签: apache-storm

我是Storm的新手,所以要温柔: - )

我想实现一个类似于Storm examples中的RollingTopWords拓扑的拓扑。想法是计算发出的单词的频率。基本上,喷口随机发出单词,第一级螺栓计算频率并传递它们。扭曲的是,我希望螺栓只有在其中一个螺栓的频率超过阈值时才能传递一个字的频率。所以,例如,如果单词" Nathan"在一个螺栓上的时间窗口内超过5次出现的阈值,然后所有螺栓将开始经过“自然”的频率向前。

我想要做的是使用另一层螺栓,这些螺栓具有超过阈值的单词列表。然后,他们将从前一层螺栓中接收单词和频率,并仅在它们出现在列表中时才传递它们。显然,这个列表必须在整个螺栓层上同步。

这是个好主意吗?实施它的最佳方法是什么?

更新:我希望实现通信最小化的情况,即我的用例中的每个节点都通过一个spout和一个附加的螺栓进行模拟,该螺栓进行本地计数。我希望那个螺栓只发出已经超过阈值的单词,无论是在螺栓本身还是在另一个中。所以每个螺栓都必须有一个超过阈值的单词列表。将有一个中央存储库,用于保存超过阈值的单词列表,并将与螺栓通信以传递该信息。

实施该方法的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

那不应该太复杂。只是不要发出这些单词,直到达到阈值,同时将它们存储在HashMap中。这只是一个if-else语句。

关于同步 - 我认为你不需要它,因为当你遇到这些问题时(计算单词)你只需要一个任务来接收一个特定的单词。接收单词的一项任务(例如" Nathan")将是唯一发出其频率的任务。为此,您应该使用fields grouping