初步接触storm

    今天学习了一下storm的相关知识,不是很深入,就是看了一下storm-starter-master项目里的WordCountTopology。直接运行报错,发现这个例子中,有个Bolts是用python或者ruby语言开发的。因为这个例子要完成的任务就是计算单词的频率,比较简单,所以打算调通它,然后把程序一步步的跟一遍,这样就好理解一些内容了。

    我的方法就是把SplitSentence的核心用java实现。

    首先肯定不用再扩展ShellBolt了,也不实现IRichBolt,而是实现BaseBasicBolt。在execute方法里的内容就照着python代码,最后一句写成
collector.emit(new Values(word,1));

但是报错:
Tuple created with wrong number of fields. Expected 1 fields but got 2 fields
说实话,我在截止错误出现的时候,对storm的理解都是相当含糊的,于是我把上面那句改成

collector.emit(new Values(word));

居然能正确运行,这纯粹是撞上的,不过这倒让我对declareOutputFields这个方法的作用有了了解。在本例中,declareOutputFields里的内容是:

declarer.declare(new Fields("word"));

它声明了该Bolt的输出字段,只有一个,而且这个Fields的名字很重要,是供下游使用的,比如这里叫word,那么在fieldsGrouping也应该通过word来指定这个结果。如果是

declarer.declare(new Fields("word","count"));则最初的那种格式是可以的。

而且,在fieldsGrouping函数里面,还可以设定从上一个Bolt中获得哪些Fields。
我觉得写Topology就像是水管工人的工作,把水流引流到需要的地方去。

猜你喜欢

转载自brucewei777.iteye.com/blog/1762801
今日推荐