Ruby 在Redstorm DSL中实现storm tick元组 拓扑结构### 类WordCountTopology2 螺栓拆分螺栓,:平行度=>2 do source RandomSentenceSpout,:shuffle 结束 螺栓WordCountBolt,:平行度=>2 do source SplitSentenceBolt,:fields=>[“word”] 结束 配置:word_count do|env| 调试正确 最大任务并行度4 如果环境==:集群 工人人数6 最大喷嘴待定(1000) 结束 结束 在|提交| env| 如果环境==:本地 睡眠(60) 群集关闭 结束 结束 结束 ###喷口### 类RandomSentenceSpoot
我想实现一个tick元组。我想每60秒进行一次字数计算,输出结果,将计数器重置为0 //可能是Ruby 在Redstorm DSL中实现storm tick元组 拓扑结构### 类WordCountTopology2 螺栓拆分螺栓,:平行度=>2 do source RandomSentenceSpout,:shuffle 结束 螺栓WordCountBolt,:平行度=>2 do source SplitSentenceBolt,:fields=>[“word”] 结束 配置:word_count do|env| 调试正确 最大任务并行度4 如果环境==:集群 工人人数6 最大喷嘴待定(1000) 结束 结束 在|提交| env| 如果环境==:本地 睡眠(60) 群集关闭 结束 结束 结束 ###喷口### 类RandomSentenceSpoot,ruby,jruby,apache-storm,Ruby,Jruby,Apache Storm,我想实现一个tick元组。我想每60秒进行一次字数计算,输出结果,将计数器重置为0 //可能是 //分句插销 函数每60秒发送一次滴答声 //字内计数螺栓 如果(勾选元组){ 发出结果 @计数=[]#重新初始化 } 谁能帮我实现这个?我对storm world还不熟悉。我不知道ruby,但希望python能帮你解决这个问题。这就是我们在螺栓中的方式: ### TOPOLOGY ### class WordCountTopology < DSL::Topology spout Rando
//分句插销 函数每60秒发送一次滴答声 //字内计数螺栓
如果(勾选元组){
发出结果
@计数=[]#重新初始化
}
谁能帮我实现这个?我对storm world还不熟悉。我不知道ruby,但希望python能帮你解决这个问题。这就是我们在螺栓中的方式:
### TOPOLOGY ###
class WordCountTopology < DSL::Topology
spout RandomSentenceSpout, :parallelism => 2
bolt SplitSentenceBolt, :parallelism => 2 do
source RandomSentenceSpout, :shuffle
end
bolt WordCountBolt, :parallelism => 2 do
source SplitSentenceBolt, :fields => ["word"]
end
configure :word_count do |env|
debug true
max_task_parallelism 4
if env == :cluster
num_workers 6
max_spout_pending(1000)
end
end
on_submit do |env|
if env == :local
sleep(60)
cluster.shutdown
end
end
end
### SPOUT ###
class RandomSentenceSpout < DSL::Spout
output_fields :word
on_send {@sentences[rand(@sentences.length)]}
sleep(10)
on_init do
@sentences = [
"the cow jumped over the moon",
"an apple a day keeps the doctor away",
"four score and seven years ago",
"snow white and the seven dwarfs",
"i am at two with nature"
]
end
end
#### SplitSentenceBolt ###
class SplitSentenceBolt < DSL::Bolt
output_fields :word
on_receive {|tuple| tuple[0].split(' ').map{|w| [w]}}
end
### WORDCOUNTBOLT ###
class WordCountBolt < DSL::Bolt
output_fields :word, :count
on_init {@counts = Hash.new{|h, k| h[k] = 0}}
on_receive do |tuple|
word = tuple[0].to_s
@counts[word] += 1
[word, @counts[word]]
end
end
您可以在功能上使用Storm internal tick tuple来设置一个螺栓,以按指定的间隔接收tick tuple 在拓扑定义的螺栓部分,只需添加以下配置:
def process(self, tup):
"""
If spout trigers tick-tuple, then perform upload
"""
if tup.stream == '__tick':
self.perform_upload()
storm.ack(tup)
return
在bolt中,您可以像下面这样测试记号元组:
bolt MyBolt do
...
set Backtype::Config::TOPOLOGY_TICK_TUPLE_FREQ_SECS, 60
...
end
这是Redstorm DSL。所以只使用ruby/py是没有帮助的(
if tuple.source_stream_id == "__tick"
...
end