之前做项目都是使用java连接操作 hbase 的,或者偶尔用 Python 写几个一些简单的 put、get 操作。最近在使用mysql库批量向 hbase 导入数据,想使用python试一下。HBase是Apache的 Hadoop 项目的子项,HBase不同于一般的 关系数据库 ,它是一个适合于 非结构化数据 存储的数据库,适合于非结构化数据存储,另一个不同的是HBase基于列的而不是基于行的开源数据库。HappyBase 是 FaceBook 员工开发的操作 HBase 的 Python 库,其基于 Python thrift ,但使用方式比 Thrift 简单、简洁许多,已被广泛应用。Python调用happybase库或hbase-thrift库使用thrift操作Hbase,thrift 是facebook开发并开源的一个二进制通讯中间件。

启动hbase thriftserver服务
hbase本身已经集成了thrift,可与第三方应用通信。使用以下命令开启hbase thrift的服务器端,默认情况下 rpc 监听9090端口. hbase-daemon.sh start thrift2
查看webui:
方法一 使用happybase 连接hbase
使用pip安装依赖:
pip install thrift
pip install happybase
happybase.Connection(host=’ localhost ‘, port=9090, timeout=None, autoconnect=True, table_prefix=None, table_prefix_separator=b’_’, compat=’0.98′, transport=’buffered’, protocol =’binary’)
其中host:主机名,port:端口,timeout:超时时间,autoconnect:连接是否直接打开,table_prefix:用于构造表名的前缀,table_prefix_separator:用于table_prefix的分隔符,compat:兼容模式,transport:运输模式,protocol:协议。
连接示例代码:
import happybase
connection = happybase.Connection(‘localhost’, compat=’0.90′)
connection. open ()
print connection.tables()
table = connection.table(‘test_table’)
row = table.row(‘row1’, columns=[‘data:1’])
print row[‘data:1’]
for key, data in table.scan():
print key, data
connection. close ()
方法二使用hbase-thrift 连接hbase
sudo pip install thrift
sudo pip install hbase-thrift
连接示例代码:
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
from thrift import Thrift
from hbase.ttypes import ColumnDescriptor, Mutation, BatchMutation, TRegionInfo
from hbase.ttypes import IOError, AlreadyExists
transport = TSocket.TSocket(‘localhost’, 9090)
transport.setTimeout(5000)
trans = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(trans)
client = Hbase.Client(protocol)
transport.open()
client.getTableNames()