概述
转自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) 及解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复