从Python和happybase / Thrift连接到Hbase

问题描述 投票:0回答:3

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

请帮助弄清楚为什么我无法通过happybase成功地进行交互,或者帮助确定下一步要进行的工作。

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

  • 我已确认可以使用hbase shell创建表,插入数据等。
  • 我已经确认9090(节俭)正在监听并接受连接。
  • 我认为我已经验证了Thrift服务器正在使用与happybase连接参数相同的协议/传输设置来运行。

几乎直接从happybase howto取得的Python脚本:

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 ~]#

我有在端口9095上运行的Thift Web服务管理器,报告:

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

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

python hadoop hbase thrift happybase
3个回答
1
投票

我想您没有使用旧版守护程序的受支持版本。

您确定使用了thrift 1(不是thrift2)守护程序,具有正确的协议和传输方式吗?


0
投票

[Happybase仅支持Thrift1。

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


0
投票

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

settings->network->advance->port forwarding

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

出于某种原因,默认情况下,Cloudera映像中未添加此端口

© www.soinside.com 2019 - 2024. All rights reserved.