这个版本中storm增加了很多新的实用的特性,其中几个比较重要的改变如下:
1.使用两种数据传输方式分别是zeroMQ/0MQ和netty
之前的版本只能使用0MQ一种传输方式,不过0MQ有一些不尽人意的地方。因为0MQ由C开发所以依赖与平台,安装也比较麻烦。而jvm调用native库也不能进行控制。
0mq的版本差异比较大,不能保证所有的版本和storm都能兼容。目前的验证可以运行的版本只有2.1.7
而使用netty比较方便不用安装由于nettty是java开发兼容性可以得到保证。另外netty的性能可以达到0mq的两倍。所以非常推荐使用netty这种方式。
在storm.yaml中加入
storm.messaging.transport: "backtype.storm.messaging.netty.Context" storm.messaging.netty.server_worker_threads: 1 storm.messaging.netty.client_worker_threads: 1 storm.messaging.netty.buffer_size: 5242880 storm.messaging.netty.max_retries: 100 storm.messaging.netty.max_wait_ms: 1000 storm.messaging.netty.min_wait_ms: 100
另外也提供可以用户自定义的传输方式,只要实现 backtype.storm.messaging.IContext 接口即可
2.增加Log viewer UI
这个版本增加了一个log viewer的守护进程,可以通过ui 直接查看worker的执行日志。 查看日志非常方便。
3. 增加window 版本
4. log的组件修改为slf4j+logback
下载后切换到netty模式,直接就可以使用确实方便许多。不过在使用的过程中还是发现了一些问题。
问题1.使用时storm0.9.0.1发现日志报错
java.lang.IllegalArgumentException: timeout value is negative at java.lang.Thread.sleep(Native Method) at backtype.storm.messaging.netty.Client.reconnect(Client.java:78) at backtype.storm.messaging.netty.StormClientHandler.exceptionCaught(StormClientHandler.java:108) at org.jboss.netty.handler.codec.frame.FrameDecoder.exceptionCaught(FrameDecoder.java:377) at org.jboss.netty.channel.Channels.fireExceptionCaught(Channels.java:525) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.connect(NioClientSocketPipelineSink.java:124) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:69) at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:54) at org.jboss.netty.channel.Channels.connect(Channels.java:634) at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:207) at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:229) at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:182) at backtype.storm.messaging.netty.Client.reconnect(Client.java:80) at backtype.storm.messaging.netty.StormClientHandler.exceptionCaught(StormClientHandler.java:108) at org.jboss.netty.handler.codec.frame.FrameDecoder.exceptionCaught(FrameDecoder.java:377) at org.jboss.netty.channel.Channels.fireExceptionCaught(Channels.java:525) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.connect(NioClientSocketPipelineSink.java:124) at org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink.eventSunk(NioClientSocketPipelineSink.java:69) at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:54) at org.jboss.netty.channel.Channels.connect(Channels.java:634)其中查找资料可能是之前的一个bug重现了。 我决定降一个版本0.9.0-rc3来代替。因为rc3版本的changelog中明确说明已经解决了该问题
问题2:降版本之后发现报错情况出现connection failed
2014-02-17 15:45:41 b.s.m.n.StormClientHandler [INFO] Connection failed:
java.nio.channels.UnresolvedAddressException: null
怀疑可能是地址有问题,最后发现使用netty链接并没有链接服务器的ip而是使用域名。原因在/etc/sysconfig/network中配置了服务器的名称。
而在/etc/hosts中没有将服务器名称对应到ip的配置,所以程序链接不上。最后在/etc/hosts中增加了对应配合后。 重新运行程序。一切正常。问题解决
原文:http://blog.csdn.net/wp500/article/details/19411587