我是靠谱客的博主 从容裙子,最近开发中收集的这篇文章主要介绍python happybase TTransportException(type=4, message=TSocket read 0 bytes) 及解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转自https://blog.csdn.net/kelebb0459/article/details/106838905

问题:使用happybase连接池操作HBASE一直出现 TTransportException(type=4, message=‘TSocket read 0 bytes’) 这个错误

原因1: 客户端链接hbase时传输协模式与协议与thriftpy服务端不匹配。可更改为 h_conn = happybase.Connection( host=“host”,port=port, transport=‘framed’, protocol=‘compact’ )

原因二:操作完hbase时with不会默认close thriftpy的socket链接,而HBASE的服务端有默认为60秒的超时后会主动断开,而操作者的连接池不知道,导致TTransportException(type=4, message=‘TSocket read 0 bytes’) 这个错误

原因三:第三个原因与第二个类似,但是现象有所不同。我简单的描述一下现象:当首次初始化好happybase连接池后,一直未操作查数据,过一会后,大概60秒再操作会出现标题中的问题。 原因是,happybase默认初始化链接池后,会默认去向hbase做一次链接(如下图),但为close,我个人认为这也是happybase这个包的bug。解决这个问题的办法就是,初始化好链接后,立刻做一次查询(比如查看hbase有哪些表)后close掉这个链接。可能大家会问,做查询的这个链接怎么保证就是happybase初始化的那个链接,其实只要看看源码就知道,happybase的连接池是维护的一个队列,所以第一次查询肯定是这个happybase包默认初始化而未释放的链接。

目前解决方案:每次数据量达到BATCH_SIZE设置的数量(我设置的是1000条数据写一次)建立一次connection,数据send完之后close连接

最后

以上就是从容裙子为你收集整理的python happybase TTransportException(type=4, message=TSocket read 0 bytes) 及解决方案的全部内容,希望文章能够帮你解决python happybase TTransportException(type=4, message=TSocket read 0 bytes) 及解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部