比较风暴螺栓中的前一个和下一个元组

时间:2016-01-14 02:32:29

标签: java hadoop distributed apache-storm

我有实时数据,由风暴拓扑处理。数据可以是四种类型,例如A,B,C,D。这些数据中的每一个都以随机顺序由螺栓消耗。我需要做的是比较两个相同数据类型的元组。例如,我想将类型A元组与下一个类型A元组进行比较,或者比较当前类型A元组与先前接收的类型A元组。有没有办法用螺栓做到这一点?或者我必须将以前的结果保存在数据库中的某个位置(让我们说hbase或缓存)并查询它以与当前特定类型的元组进行比较。

修改

假设A,B,C,D类型的数据流来自spout

B4 A4 C7 D2 A3 A2 B3 C6 D1 B2 C5 C4 B1 C3 C2 C1 A1 ----->喷口 - >螺栓

现在在螺栓上我想比较A1和A2,A2和A3,A3和A4。类似地,B1与B2,B2与B3等。

1 个答案:

答案 0 :(得分:1)

您可以在spout中发出元组时指定数据的类型。 然后您可以使用字段分组,因此每个类型A将转到同一个线程。这样,您最多可以执行4个不同的线程来执行您的螺栓代码。保证每个线程的顺序。

builder.setBolt(BOLT_NAME, new BoltClass(),4)
.fieldsGrouping(SPOUT_NAME,new Fields("type"));

Storm文档中的字段分组定义:

  

字段分组:流按分组中指定的字段进行分区。例如,如果流按" user-id"进行分组。字段,具有相同元组" user-id"将始终执行相同的任务,但具有不同"用户ID"的元组可能会执行不同的任务。

http://storm.apache.org/documentation/Concepts.html