storm学习(三):storm0.9.0版本试用

来源:互联网 发布:社交网络的影响 编辑:程序博客网 时间:2024/05/21 08:00
不知不觉中,storm版本来到了0.9.0版本

这个版本中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: 1storm.messaging.netty.client_worker_threads: 1storm.messaging.netty.buffer_size: 5242880storm.messaging.netty.max_retries: 100storm.messaging.netty.max_wait_ms: 1000storm.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中增加了对应配合后。 重新运行程序。一切正常。问题解决





0 0
原创粉丝点击