码迷,mamicode.com
首页 > 其他好文 > 详细

Storm thrift获取性能数据报错及解决

时间:2014-09-09 11:22:18      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:http   os   使用   java   ar   数据   问题   sp   log   

我们想通过Storm提供的thrift接口来获取Toplogy的性能数据,比如emiited了多少,延迟是多少之类。但在使用Python开发过程中,发现getClusterInfo这个方法,会报错,thrift版本0.7,Storm版本为0.9.0.1,错误如下:

Traceback (most recent call last):
  File "/home/frankyao/git/StormMetrics/main.py", line 31, in <module>
    topology_info = nimbus.getTopologyInfo(topology.id)
  File "./gen-py/storm/Nimbus.py", line 584, in getTopologyInfo
    return self.recv_getTopologyInfo()
  File "./gen-py/storm/Nimbus.py", line 602, in recv_getTopologyInfo
    result.read(self._iprot)
  File "./gen-py/storm/Nimbus.py", line 2830, in read
    self.success.read(iprot)
  File "./gen-py/storm/ttypes.py", line 2724, in read
    _elem265.read(iprot)
  File "./gen-py/storm/ttypes.py", line 2600, in read
    self.stats.read(iprot)
  File "./gen-py/storm/ttypes.py", line 2391, in read
    self.specific.read(iprot)
  File "./gen-py/storm/ttypes.py", line 2280, in read
    self.bolt.read(iprot)
  File "./gen-py/storm/ttypes.py", line 1979, in read
    _val128[_key134] = _val135
TypeError: unhashable instance

使用thrift 0.7还是失败

这个问题看上去是thrift的问题,在Storm的源码中的storm-core/src/getthrift.sh里,发现应该使用thrift 0.7:

thrift7 --gen java:beans,hashcode,nocamel --gen py:utf8strings storm.thrift

随后我安装thrift 0.7,发现还是不行,依然报上面的错。

在查了Google后,发现有一个大哥在今年二月也碰到这个问题,并且解决了。需要使用storm提供的thrift,并且要打上一个thrift的patch。

解决方案

  1. 使用storm提供的thrift:https://github.com/nathanmarz/thrift/archive/storm.zip

    wget https://github.com/nathanmarz/thrift/archive/storm.zip
    unzip storm.zip
    cd thrift-storm
    
  2. 打上这个patch:https://issues.apache.org/jira/secure/attachment/12501771/thrift-1382.patch

    wget https://issues.apache.org/jira/secure/attachment/12501771/thrift-1382.patch
    patch -p0 < thrift-1382.patch
    
  3. 安装thrift-storm

    sudo ./bootstrap.sh
    sudo ./configure
    sudo make
    sudo make install
    
  4. 重新使用thrift生成python包

    thrift --gen py storm.thrift
    

顺便想到的

我想起了Storm在以前还依赖zeromq的时候,是zeromq还是jzmq来着,不能使用官方版本,要使用storm提供的一个特定版本。这个问题坑了很多人,在使用netty后,这个问题已经解决。

Storm要获取这些运行时的性能数据,一定要使用thrift(或者抓取ui用dom分析,但这个非常麻烦),这个问题也是非常的坑爹。

Storm thrift获取性能数据报错及解决

标签:http   os   使用   java   ar   数据   问题   sp   log   

原文地址:http://www.cnblogs.com/callme/p/3961647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!