【问题标题】:Connect to Hbase from Python and happybase / Thrift从 Python 和 happybase / Thrift 连接到 Hbase
【发布时间】:2017-05-31 14:08:31
【问题描述】:

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

请帮助找出我无法通过happybase 成功连接的原因,或帮助确定接下来要采取的步骤。

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

  • 我已验证我可以使用 hbase shell 创建表、插入数据等。
  • 我已验证 9090 (thrift) 正在侦听并接受连接。
  • 我想我已经验证 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 ~]#

我在端口 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

非常感谢任何帮助。谢谢。

【问题讨论】:

  • 您确定使用了 thrift 1(而不是 thrift2)守护程序,并且使用了正确的协议和传输方式吗?
  • Wouter - 打赌你是对的。我不知道 Thrift1/2 的差异,也没有 Thrift² happybase 支持。如果您作为答案发布,我将接受答案。
  • 嗨,另一个相关问题 - hbase 不需要用户名/密码来连接任何其他数据库吗?

标签: python hadoop hbase thrift happybase


【解决方案1】:

我猜你没有使用受支持的 thrift 守护程序版本。

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

【讨论】:

【解决方案2】:

Happybase 仅支持 Thrift1。

对于使用 Thrift2 对 hbase 的 python 支持,试试这个: https://github.com/apache/hbase/blob/master/hbase-examples/src/main/python/thrift2/DemoClient.py

【讨论】:

    【解决方案3】:

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

    settings-&gt;network-&gt;advance-&gt;port forwarding

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

    由于某种原因,Cloudera 镜像中默认未添加此端口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2015-11-27
      • 1970-01-01
      • 2019-02-15
      相关资源
      最近更新 更多