从Python和happybase/Trift连接到Hbase



我已经安装了Cloudera Manager Express 5.9.0,安装了HBase,Thrift服务器在一个VirtualBox vm中的CentOS 7.3端口9090上运行。

请帮助我弄清楚为什么我无法通过happybase成功对接,或者帮助确定下一步要做的事情。

我是一名经验丰富的Java程序员,正在学习Python。我有使用本地接口使用Java中的Hbase的经验,尽管不是在这个特定的环境中。

  • 我已经验证了我可以使用hbaseshell创建表、插入数据等
  • 我已经证实9090(节俭)正在倾听并接受连接
  • 我想我已经验证了Thrift服务器使用与happybase连接参数相同的协议/传输设置运行

Python脚本实际上直接取自happybase howto:

import happybase
connection = happybase.Connection(host='localhost',port=9090,transport='buffered', protocol='compact')
connection.create_table('mytable',
{'cf1': dict(max_versions=10),
'cf2': dict(max_versions=1, block_cache_enabled=False),
'cf3': dict(),  # use defaults
}
)

错误消息,我找不到很好的参考:

[root@data1 ~]# python testhbase.py
Traceback (most recent call last):
File "testhbase.py", line 10, in <module> 'cf3': dict(),  # use defaults
File "build/bdist.linux-x86_64/egg/happybase/connection.py", line 311, in create_table
File "/usr/lib64/python2.7/site-packages/thriftpy/thrift.py", line 198, in _req return self._recv(_api)
File "/usr/lib64/python2.7/site-packages/thriftpy/thrift.py", line 210, in _recv fname, mtype, rseqid = self._iprot.read_message_begin()
File "/usr/lib64/python2.7/site-packages/thriftpy/protocol/compact.py", line 147, in read_message_begin % proto_id)
thriftpy.protocol.exc.TProtocolException: TProtocolException(type=4)
[root@data1 ~]#

我有Thift网络服务管理器在端口9095上运行,它报告:

HBase Version   1.2.0-cdh5.9.0, rUnknown    HBase version and revision
Thrift Impl Type    threadpool  Thrift RPC engine implementation type chosen by this Thrift server
Compact Protocol    true    Thrift RPC engine uses compact protocol
Framed Transport    false   Thrift RPC engine uses framed transport

非常感谢您的帮助。非常感谢。

Happybase仅支持Thrift1。

对于使用Thrift2的hbase的python支持,请尝试以下操作:https://github.com/apache/hbase/blob/master/hbase-examples/src/main/python/thrift2/DemoClient.py

我猜您没有使用支持版本的旧版守护进程。

您确定使用了具有正确协议和传输的节俭1(而不是节俭2)守护进程吗?

我遇到了同样的问题,在花了40多个小时后,我发现在Cloudera VM:中

settings->network->advance->port forwarding

您需要添加新的端口9090和9095(可选)才能使其工作。

出于某种原因,Cloudera镜像中默认没有添加此端口

最新更新