编辑:此问答适用于遇到主题行中所述异常的任何人:ttTransportException(type=4,message='tsocket read 0 bytes');是否涉及cloudera和/或happybase。
根本问题(事实证明)源于不匹配 protocol
和/或 transport
屏幕上的格式 client-side
用什么 server-side
正在实现,任何客户端/服务器配对都可能发生这种情况。我的刚好是cloudera和happybase,但你的不必是,你可能会遇到同样的问题。
最近有人试过使用 happybase v1.1.0 (latest)
与之交互的python包 Hbase
在 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
)用Python thrift
绑定包(换句话说,我删除了 happybase
从方程式)得到了同样的例外。
(._.);
谢谢您!
1条答案
按热度按时间jv4diomz1#
经过一天的努力,我的问题的答案如下:
请注意,尽管本问答是在
Cloudera
,原来(你会看到)这是Thrift
版本和Thrift
服务器端配置相关,因此它适用于Hortonworks
以及MapR
用户也是。说明:
在
Cloudera CDH v6.1.x
如果你访问Hbase Thrift Server Configuration
在它的管理u.i.部分,你会发现——在许多其他设置中——这些:注意
compact protocol
以及framed transport
都已启用;因此,他们相应地需要改变happybase
从它的默认值(我在上面显示)。正如在我的第一个问题的后续编辑中提到的,我还调查了一个纯粹的
Thrift
(非happybase
)解决方案。通过对python代码进行类似的修改,我也实现了这一点。下面是你应该使用的纯代码Thrift
解决方案(注意阅读下面我的注解):我希望这能减轻人们对我的痛苦
信用:
这里(mapr)和
这里(来自中国的博客)