项目作者: zhou5827297

项目描述 :
storm简单用例,实现本地和部署storm集群的流计算
高级语言: Java
项目地址: git://github.com/zhou5827297/storm.git
创建时间: 2017-03-13T07:47:07Z
项目社区:https://github.com/zhou5827297/storm

开源协议:

下载


storm简单用例

实现本地和storm集群的流计算

具备功能

简单计算单词出现频率

相关总结

  • Storm在多个工作节点上运行的问题
    • 问题:storm启动之后只在一个worker上运行
    • 原因:storm程序中未指定worker数量,默认为一个worker
    • 解决:
      • 程序中调用backtype.storm.Config的setNumWorkers方法指定worker数量
      • 使用storm rebalance的命令可以动态调整topology的运行worker节点数、线程数
      • storm rebalance topologyName [-w waitTimeSecs] [-n numWorkers] [-e component=parallelism]
  • Storm打包问题
    • 问题:使用Eclipse的Export打包,发布到Storm集群,报错
    • 原因:由于storm官方要求运行的jar包需要去除storm-core的依赖,而Eclipse的Export打包无法排除storm-core相关的包
    • 解决:使用maven打jar包,在maven配置文件的storm-core的dependency中添加provided或者test,可以在打包时解除storm-core相关包的依赖
      • Topology发布时出现AlreadyAliveException(msg: topologyName is alreadyactive)异常
    • 问题:发现已经发布的一个topology,在所有worker节点都未启动,所以在master节点重新发布,报错
    • 原因:已经发布的topology,由于一些特殊原因未在任何一个worker节点启动,由于master节点会认为该topology在发布中,所以会报topology已有效的异常。
    • 解决:
      • 使用storm killtopologyName命令先结束掉topology,再重新发布。
  • Storm与Spring集成的问题
    • 问题:spring的Service类及ClassPathXmlApplicationContext初始化时报java.io.NotSerializableException的异常
    • 原因:由于service在定义时做了初始化,而storm的发布需要先序列化sport、bolt对象,将sport、bolt对象发布到worker节点上,然后在worker节点上反序列化,再运行,所以在sport、bolt初始化时需要创建的对象都需要实现java.io.Serializable接口。
    • 解决:
      • 如果是自己写的类,可以使其实现java.io.Serializable接口
      • 如果是第三方包的类,那么需要将对象的初始化放到sport、bolt的prepare方法中,该方法是在worker节点反序列化之后被调用,专门用来初始化对象的方法

注意

版本问题,高版本有可能会导致无法启动本地模式运行strom

参考资料

http://storm.apache.org/releases/current/index.html
http://storm.apache.org/releases/current/storm-redis.html
https://github.com/apache/storm/tree/master/external/storm-kafka

问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流