4

我正在尝试使用使用的 python 示例代码连接到 Hbase

import happybase
connection = happybase.Connection(myhost,port, autoconnect=True)

# before first use:
connection.open()
print(connection.tables())

这给出了如下错误

print(connection.tables()) Traceback(最近一次调用最后一次):文件“”,第 1 行,在文件“/usr/local/lib/python2.7/dist-packages/happybase/connection.py”,第 242 行,在表名 = self.client.getTableNames() 文件“/usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py”,第 198 行,在 _req 中返回 self._recv(_api) 文件“ /usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py”,第 210 行,在 _recv fname、mtype、rseqid = self._iprot.read_message_begin() 文件“thriftpy/protocol/cybin/cybin. pyx”,第 439 行,在 cybin.TCyBinaryProtocol.read_message_begin (thriftpy/protocol/cybin/cybin.c:6470) cybin.ProtocolError: No protocol version header

操作系统:Ubuntu 16.04 我正在使用python 2.7 Hbase 1.1 版帮助我理解这个问题。除了happybase 之外,还有什么更好的方法可以连接到Hbase

谢谢

4

2 回答 2

6

感谢您提出问题,我确实遇到了同样的问题,互联网上没有答案。不确定我们是不是唯一一个这样做的人。

但这是我想出解决问题的方法,从错误中可以清楚地看出它与节俭有关,因此请检查以下内容

/usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift

如果节俭没有运行!你可能需要开始节俭

/usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift -p 9090 --infoport 9091

然后尝试您的代码。

import happybase

c = happybase.Connection('127.0.0.1',9090, autoconnect=False)
c.open()
print(c.tables())

自动连接到 hbase

import happybase

c = happybase.Connection('127.0.0.1',9090)
print(c.tables())

作为替代方案,您可以使用starbase,但它不再处于活动状态,我相信您需要启动rest API。 /usr/hdp/current/hbase-master/bin/hbase-daemon.sh start rest -p 8000 --inforport 8001 试试happybase,如果您遇到同样的问题,请告诉我们。

顺便说一句,我的测试是在 HDP2.5 上完成的

进一步参考: https ://github.com/wbolster/happybase/issues/161

我不推荐,除非你知道你在做什么

删除以下属性:从 hbase-site.xml [/etc/hbase/conf/hbase-site.xml]

<property>
  <name>hbase.regionserver.thrift.http</name>
  <value>true</value>
</property>
<property>
  <name>hbase.thrift.support.proxyuser</name>
  <value>true/value>
</property>

希望这会有所帮助,
阿莫德

于 2018-03-06T08:03:57.097 回答
0

要么你这样做,要么你autoconnect = True明确地使用connection.open(). 你不必同时做这两件事。

于 2017-10-16T18:37:18.143 回答