我正在尝试通过 happybase 框架版本 0.8 连接 hbase。
我已经启动守护进程节俭- /usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift -p 9090
/usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift -p 9090
from happybase.connection import Connection DEFAULT_HOST = '10.128.121.13' DEFAULT_PORT = 9090 DEFAULT_TRANSPORT = 'framed' DEFAULT_COMPAT = '0.96'` cc = Connection(DEFAULT_HOST,DEFAULT_PORT,None,True,None,'_',DEFAULT_COMPAT,DEFAULT_TRANSPORT) print(cc.tables())`
我是否需要在所有节点、Hbase 主服务器和 RegionServers 上启动 thrift 服务?
我收到此错误:
TSocket read 0 bytes
在通过 HappyBase 连接 HBase 时,TSocket read 0 bytes 错误通常表明客户端无法正确地与 HBase Thrift 服务器通信。以下是解决问题的一些关键检查和步骤:
bash netstat -an | grep 9090
DEFAULT_TRANSPORT = 'framed'
framed
bash hbase-daemon.sh start thrift -p 9090 -f
-f
10.128.121.13
9090
telnet
nc
bash telnet 10.128.121.13 9090
DEFAULT_COMPAT = '0.96'
py DEFAULT_COMPAT = '1.0' # 针对 HBase 1.x
bash hbase version
TBinaryProtocol
--compact
示例:
from thrift.protocol import TCompactProtocol from happybase.connection import Connection DEFAULT_TRANSPORT = 'framed' DEFAULT_COMPAT = '1.0' cc = Connection( host='10.128.121.13', port=9090, transport=DEFAULT_TRANSPORT, compat=DEFAULT_COMPAT, protocol=TCompactProtocol.TCompactProtocolAccelerated ) print(cc.tables())
status ‘summary’ ```
根据错误信息,最可能的问题是: 1. Thrift 服务没有以 framed 模式启动。 2. 网络连通性或防火墙问题导致无法访问 10.128.121.13:9090。 3. DEFAULT_COMPAT 或 Thrift 协议与 HBase 的实际配置不匹配。
10.128.121.13:9090
DEFAULT_COMPAT
逐一排查上述问题后,HappyBase 应该能够正常连接到 HBase。