3

我正在尝试从 hbase 使用 python 读取数据。我安装了 thrift,并生成了 gen-py 文件,然后将其移至 python lib:~/.local/lib/python2.7/site-packages/

hbase thrift 服务器位于 192.168.15.116:39090。是开始了。

我的代码在服务器 192.168.15.146 中。在这台机器上,我可以使用 hbase shell 命令来读取 hbase 数据。这是我的 Python 代码:

#! /usr/bin/env python
from thrift import Thrift                                                                                                                                                                
from thrift.transport import TSocket, TTransport                                                                                                                                         
from thrift.protocol import TBinaryProtocol                                                                                                                                              
from hbase import Hbase                                                                                                                                                                  


transport = TSocket.TSocket('192.168.15.116', 39090)                                                                                                                                     

transport.setTimeout(5000)                                                                                                                                                               

#transport = TTransport.TBufferedTransport(transport)                                                                                                                                    

protocol = TBinaryProtocol.TBinaryProtocol(transport)                                                                                                                                    

client = Hbase.Client(protocol)                                                                                                                                                          

transport.open()                                                                                                                                                                         


print(client.getTableNames())

一切正常,但最后一行,这是错误:

 Traceback (most recent call last):
  File "test01.py", line 24, in <module>
    client.getTableNames()
  File "~/.local/lib/python2.7/site-packages/hbase/Hbase.py", line 788, in getTableNames
    return self.recv_getTableNames()
  File "~/.local/lib/python2.7/site-packages/hbase/Hbase.py", line 803, in recv_getTableNames
    raise x
thrift.Thrift.TApplicationException: Internal error processing getTableNames

我用谷歌搜索但找不到解决此错误的方法,有人可以帮我吗?提前致谢!

4

2 回答 2

0

我不确定,但在快速查看代码后,似乎服务器上的处理程序/处理器代码引发了意外异常。意外含义:既不是节俭的,也不是 IDL 文件中声明的异常之一。

在这种情况下,建议是查看 HBase,这是否是一个已知问题等。

于 2013-09-25T11:42:38.417 回答
0

请检查您的 thrift主机Port,您可以使用happybase,例如:

import happybase
connection = happybase.Connection(host='hadoop_env.com',port=9090,timeout=1000000)
connection.open()
print connection.tables()

还有一系列例子:

https://github.com/Shadow-Hunter-X/python_practice_stepbystep/blob/master/python-on-bigdata/chapter6/chapter6_happybase.py

于 2021-09-26T06:07:45.360 回答