# -*- coding: utf-8 -*-import happybasefromthrift.transport.TSocket import TSocketfromthrift.transport.TTransport import TBufferedTransportfromthrift.protocol import TBinaryProtocolfromhbase import Hbase
host= 'ip'port= 9090rowkey= ""
'''happybase为python操作habse的常用第三方模块,但不支持habse的删除操作。
HbaseUtil: 封装hbase模块,实现 表的查询、删除
HappyHbaseUtil:封装happybase模块,实现创建表、插入、删除rawkey、查找'''def ExceptionHabase(function):try:
def warpper(*args, **kwargs):
function(*args, **kwargs)
except Exceptionasexp:returnexpelse:returnwarpperclass HbaseUtil(object):
def __init__(self):
self.transport=TBufferedTransport(TSocket(host, port))
self.transport.open()
self.protocol=TBinaryProtocol.TBinaryProtocol(self.transport)
self.client=Hbase.Client(self.protocol)
def __del__(self):
self.transport.close()
def show_tables(self):'''查看表中的所有的表
:return:''' returnself.client.getTableNames()
@ExceptionHabase
def delete_table(self, tablename):'''删除hbase中的表,如果表在占用则停止掉进行删除,否则直接删除
:param tablename: 表名
:return:''' ifself.client.isTableEnabled(tablename):
self.client.disableTable(tablename)
self.client.deleteTable(tablename)return "sucess delete {tablename}".format(tablename=tablename)class HappyHbaseUtil(object):
def __init__(self):
self.connection=happybase.Connection(host)
self.connection.open()
def __del__(self):
self.connection.close()
@ExceptionHabase
def create_table(self, tablename=None, families=None):''':param tablename:
:param families:
:return:''' if families ==None:
families=dict()
self.connection.create_table(name=tablename, families=families)return "suceess create table {tablename}".format(tablename=tablename)
@ExceptionHabase
def insert(self, tablename, data=None, rawkey=None, batch_size=10):''':param tablename: 表名
:param data: 插入数据 数据类型为dict
:param rawkey: 指定rawkey
:return:''' ifnot isinstance(data, dict):
import json
data=json.dumps(data)
table=self.connection.table(tablename)
with table.batch(batch_size=batch_size) asbat:
bat.put(rawkey, data=data)return "success"@ExceptionHabase
def delete_rawkey(self, tablename, rawkey,families=None):''':param tablename:表名
:param rawkey:删除的rawkey
:return:''' table =self.connection.table(tablename)
with table.batch()asbat:
bat.delete(rawkey,columns=families)return "success delete {rawkey}".format(rawkey=rawkey)
@ExceptionHabase
def select_rawkey(self, tablename, rawkey,families=None):''':param tablename:表名
:param rawkey: 查找的rawkey
:param families:查找的列族 类型为List ['cf1:price', 'cf1:rating'])
:return:''' table =self.connection.table(tablename)return table.row(rawkey,columns=families)
@ExceptionHabase
def select_rawkey_list(self,tablename,rawkeylist,families=None):''':param tablename: 查询的表名
:param rawkeylist: 查询的rawkey列表,以list的形式传入
:param families:列族 类型为list ['cf1:price', 'cf1:rating']
:return:''' table =self.connection.table(tablename)return dict(table.rows(rawkeylist,columns=families))if __name__ == "__main__":
##使用连接池##
hb=HappyHbaseUtil()
pool= happybase.ConnectionPool(size=10, host=host)
with pool.connection()asconnection:
setattr(hb,'connection',connection)
hb.select_rawkey(tablename='habase',rawkey='123')