编辑:此问题和答案适用于遇到主题行中所述异常的任何人:TTransportException(type=4, message='TSocket read 0 bytes') ; 是否涉及 Cloudera 和/或 HappyBase。
根本问题(事实证明)源于与正在实现的内容不匹配
protocol
和/或transport
格式,这可能发生在任何客户端/服务器配对中。我的恰好是Cloudera 和 HappyBase,但你的不一定是,你可能会遇到同样的问题。client-side
server-side
最近有没有人尝试使用happybase v1.1.0 (latest)
Python 包与Hbase
on交互Cloudera CDH v6.1.x
?
我正在尝试各种选项,但不断出现异常:
thriftpy.transport.TTransportException:
TTransportException(type=4, message='TSocket read 0 bytes')
这是我开始会话并提交简单调用以获取表列表的方式(使用Python v3.6.7
:
import happybase
CDH6_HBASE_THRIFT_VER='0.92'
hbase_cnxn = happybase.Connection(
host='vps00', port=9090,
table_prefix=None,
compat=CDH6_HBASE_THRIFT_VER,
table_prefix_separator=b'_',
timeout=None,
autoconnect=True,
transport='buffered',
protocol='binary'
)
print('tables:', hbase_cnxn.tables()) # Exception happens here.
以下是服务器的Cloudera CDH v6.1.x
启动方式Hbase Thrift
(为简洁起见):
/usr/java/jdk1.8.0_141-cloudera/bin/java [... snip ... ] \
org.apache.hadoop.hbase.thrift.ThriftServer start \
--port 9090 -threadpool --bind 0.0.0.0 --framed --compact
我已经尝试了几种选项的变体,但一无所获。
有没有人让这个工作?
编辑:我接下来编译Hbase.thrift
(从Hbase
源文件 -HBase
使用的相同版本CDH v6.1.x
)并使用 Pythonthrift
绑定包(换句话说,我happybase
从等式中删除)并得到相同的异常。
(._.);
谢谢!