r语言 - 保留风暴中喷口特定 id 的变量值/状态



>我定义了一个计算特定阈值的螺栓。螺栓正在接收字段的多个值的数据。我是否可以为字段的特定值保留变量的值/状态。

假设我有两组元组输入 s$tuple$input:

s$id = "21343254545454354343"            s$id="45645465645456561234"
s$tuple$input = ["ABC",2]                s$tuple$input= ["CDE",5]

是否可以保留变量的值,例如"ABC"的 counter=5 和"CDE"的 counter=9,并且仅在收到相应 id 的元组时才更新它们。

我没有玩过 Storm 和 R,但希望这些想法与 Java 相似。

有几个选项可用于存储状态:

  • 在工人内存中(每个螺栓)
  • 外部存储(不在风暴内)

选择什么取决于你的要求,但让我们假设你只是想数字,并不真正关心工人是否死亡。为此,实现很简单。只需在 bolt 中创建一个私有变量并跟踪即可。

例如,假设您有一个计数变量:

Map<String, Integer> counts = new HashMap<String, Integer>();

然后,在 bolt 的执行方法中,您只需检查之前是否得到过这个词,如果是,则增加计数:

Integer count = counts.get(word);
if (count == null)
   count = 0;
count++;
counts.put(word, count);

来源:WordCountBolt.java

您还需要考虑元组如何流向辅助角色。您可能不想再使用随机分组了。相反,您希望按 ID 进行字段分组,以便具有相同 ID 的元组转到相同的 bolt。

展望未来,您可能想要更耐用的东西(因此,如果您失去了工人,那么您不会丢失所有计数),因此您可能会将计数存储在HBase之类的东西中。

最新更新