我是靠谱客的博主 复杂大碗,最近开发中收集的这篇文章主要介绍happybase(TSocket read 0 bytes)关于报错测试代码报错可能原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开发十年,就只剩下这套Java开发体系了 >>>   hot3.png

关于报错

happybase 是使用python连接hbase的一个第三方库,目前基于thrift1 。在使用过程中经常碰到报错

TTransportException(type=4, message='TSocket read 0 bytes')

即使使用thrift server首页上提供了连接Apache HBase Wiki on Thrift里的demo也一样报错。

测试代码

import happybase
def get_tables_name(host,port):
    conn = happybase.Connection(host=host,port=port)
    return conn.tables()

很简单,就是连接hbase,返回所有table名称。

报错可能原因

  • hbase 未开启thrift服务
  • Connection参数与thrift服务不匹配

Connection参数

看一下官网wiki上建立连接的例子

from thrift.transport.TSocket import TSocket
from thrift.transport.TTransport import TBufferedTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase

transport = TBufferedTransport(TSocket(host, port))
transport.open()
protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = Hbase.Client(protocol)

构建一个连接需要两个辅助类 TBufferedTransportTBinaryProtocol。其中transport负责通讯协议,protocol负责序列化协议。

happybase connection

happybase官网上对于connection的介绍connection的介绍

总结有三个参数需要匹配

  • protocol: binary (the default) and compact
  • compat :0.90, 0.92, 0.94, or 0.96 (the default)
  • transport :buffered (the default) and framed

在我将上述测试代码改为

import happybase
def get_tables_name(host,port):
    conn = happybase.Connection(host=host,port=port,protocol='compact',transport='framed')
    return conn.tables()

就没问题了。

最后

以上就是复杂大碗为你收集整理的happybase(TSocket read 0 bytes)关于报错测试代码报错可能原因的全部内容,希望文章能够帮你解决happybase(TSocket read 0 bytes)关于报错测试代码报错可能原因所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部