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

我们想通过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分析,但这个非常麻烦),这个问题也是非常的坑爹。

时间: 2024-08-07 08:16:00

Storm thrift获取性能数据报错及解决的相关文章

react踩坑记录——使用fetch获取json数据报错

报错: 原因其实是list.json文件路径错误,该文件路径是相对于index.html的,而不是App.js或者index.js.

解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错

前言:在空间里回顾了我的2014,从生活.技术.家庭等各方面对自己进行总结剖析,也是给自己一个交代.也想在博客上专门写一篇2014年度菜鸟的技术路回忆录,但是因为各种事一再耽搁了,现在来写也就更显得不合时宜了,也就作罢了,反正码农的生活都是围绕着pc.代码转,绕不开整天敲敲打打的26个字母. 看着在园子的园龄单位从月变成年,翻翻过去写的博客从大数据到可视化以及一些零散分支,渐渐的发现,变化的时间,不变的是成长. 书归正传,这两天有看到阿里在举办一个天池大数据竞赛,仔细一看,做的是推荐算法.抱着一

spring boot 解决后台返回 json 到前台中文乱码之后出现返回json数据报错 500:no convertter for return value of type

问题描述 spring Boot 中文返回给浏览器乱码 解析成问号?? fastJson jackJson spring boot 新增配置解决后台返回 json 到前台中文乱码之后,出现返回json数据报错:no convertter for return value of type 注释掉解决中文乱码的问题之后返回对象json正常 Failed to write HTTP message: org.springframework.http.converter.HttpMessageNotWr

解决mysql插入数据报错[Err] 1146 - Table &#39;performance_schema.session_status&#39; doesn&#39;t exist

解决办法:1.打开cmd 执行命令cd/ 进入C盘根目录2.dir 查看C盘根目录下文件夹  找到 Program Files文件夹3.cd Program Files 进入该文件夹下 再输入dir 查看该文件夹下所有文件夹4.cd MySQL 进入该文件夹  再输入dir 查看该文件夹下所有文件夹5.cd MySQLServer 5.7 进入该文件夹  再输入dir 查看该文件夹下所有文件夹6.cd bin 进入该文件夹  7.输入mysql_upgrade -u root -p --forc

20170514002Oracle 11g R2安装过程中遇到的报错及解决办法

Oracle 11g R2安装过程中遇到的报错及解决办法 1.提示Check if the DISPLAYvariable is set.    Failed<<<< 解决方案: #xhost +  //切换到root用户输入 #su – Oracle  //切换到oracle用户 $./runInstaller  //执行安装程序 xhost 是用来控制X server访问权限的. 通常当你从hostA登陆到hostB上运行hostB上的应用程序时, 做为应用程序来说,hostA

HBase 高性能获取数据 - 多线程批量式解决办法

在前篇博客里已经讲述了通过一个自定义 HBase Filter来获取数据的办法,在末尾指出此办法的性能是不能满足应用要求的,很显然对于如此成熟的HBase来说,高性能获取数据应该不是问题.下面首先简单介绍了搜索引擎的性能,然后详细说明了HBase与MySQL的性能对比,这里的数据都是经过实际的测试获得的.最后,给出了采用多线程批量从HBase中取数据的方案,此方案经过测试要比通过自定义Filter的方式性能高出很多. Solr和HBase专辑 1.“关于Solr的使用总结的心得体会”(http:

Entity Framework插入数据报错:Validation failed for one or more entities. See &#39;EntityValidationErrors&#39; property for more details.

stackoverflow的解决方法 try { db.Entity.Add(entity); db.SaveChanges(); } catch (DbEntityValidationException dbEx) { foreach (var validationErrors in dbEx.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { System

Python安装xlrd和xlwt的步骤以及使用报错的解决方法

一.安装xlrd和xlwt功能模块步骤 1.使用python -V查看python的版本号,并查看python安装环境,是否安装成功: 2.可以通过官网(python官网:https://pypi.python.org/pypi)或者其他手段获取到功能模块的安装程序包: 3.将程序包解压,并放在python->Lib文件下   4.在cmd命令窗口中,进入E:\Python\Python36\Lib目录下,分别进入xlrd和xlwt的目录下,执行python setup.py install命令

Windows 下rsync同步数据报错7456

Windows下rsync同步数据报错如下图: 解决方法:此报错原因(rsync服务器端无法连接到客户端212.246)检测69.251服务器端到客户端的rsync端口是否通 873 发现69.251到客户端212.246的端口873是不通的,在212.246上面的防火墙规则加上873端口.再次运行此同步脚本即可.