我正在尝试使用python连接到Hbase 使用的示例代码
import happybase
connection = happybase.Connection(myhost,port, autoconnect=True)
# before first use:
connection.open()
print(connection.tables())
给出错误如下
操作系统:Ubuntu 16.04 我正在使用python 2.7 Hbase版本1.1 帮助我理解这个问题。除了happybase之外,还有更好的方法可以连接到Hbase打印(connection.tables()) Traceback(最近一次调用最后一次): 文件"",第1行,in 文件" /usr/local/lib/python2.7/dist-packages/happybase/connection.py" ;,第242行,在表格中 names = self.client.getTableNames() 文件" /usr/local/lib/python2.7/dist-packages/thriftpy/thrift.py" ;,第198行,在_req中 return 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:没有协议版本标题
由于
答案 0 :(得分:2)
感谢您提出这个问题,我确实陷入了同样的问题,互联网上没有答案。我们不确定是否是唯一能够达到此目的的人。
但这是我如何解决问题,从错误中明确表示与thrift有关,所以请检查以下内容
/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,如果您遇到同样的问题,请告诉我们。
BTW我的测试是在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>
希望这有帮助,
AMOD
答案 1 :(得分:0)
您执行autoconnect = True
或使用connection.open()
明确启动它。你不必一起做这两件事。