0
在风暴中,信息流(元组)来自Spout到Bolt。 为了防止信息过载,我在开始时过滤掉大部分数据,但是在处理完数据之后,我想根据数据中的模式添加更多通过喷口的信息。 换句话说,我想在运行时根据螺栓处理的数据动态地改变从Spout传来的信息。有没有办法在Apache Storm中将一个变量从Bolt传递给Spout?
在风暴中,信息流(元组)来自Spout到Bolt。 为了防止信息过载,我在开始时过滤掉大部分数据,但是在处理完数据之后,我想根据数据中的模式添加更多通过喷口的信息。 换句话说,我想在运行时根据螺栓处理的数据动态地改变从Spout传来的信息。有没有办法在Apache Storm中将一个变量从Bolt传递给Spout?
不,但是您可以将过滤逻辑从喷口移出到新的第一个螺栓中。喷口仅提取所有数据并将其转发给新的过滤器螺栓。对于螺栓,可以在图表中有循环,即可以将信息反馈给过滤器螺栓。例如这样的事情:
builder.addSpout("spout",...);
builder.addBolt("filter",...)
.localOrShuffleGrouping("spout") // regular forward connection
.allGrouping("someLaterBolt"); // cyclic feedback connection
// add more bolts here
builder.addBolt("someLaterBolt",...).someConnectionPattern("somePreviousBolt")
我不能也不想让所有的数据通过喷口。原因是我正在使用twitter4j apis。所以我想根据我在推文中看到的模式修改喷口中这些API的参数。 – bigdata2
我明白了。您不想在喷口内进行过滤,但可以对其进行修改以从外部源获取更多或更少的数据。我想这没有Storm支持。当然,你可以在你的UDF代码中做任何事情来构建一个手工制作的解决方案...... –
我从来没有听说过风暴中的UDF。我知道UDF用于扩展Hadoop的PIG。你如何为这种情况创建一个UDF? – bigdata2