HBase是一个分布式、面向列的开源数据库,是Apache的Hadoop项目的子项目。 HBase与一般关系型数据库的不同之处在于,它是适合非结构化数据存储的数据库。另一个区别是 HBase 是基于列的而不是基于行的。它的数据结构类似于Redis的key-value模型。
python3.7通过thrift和rpc接口操作hbase,指定的依赖库为:thrift和hbase-thrift。但是我们发现在python3.7环境下无法支持hbase-thrift-0.20.4。 hbase-thrift 官方仅推荐用于 python2.x。于是就有了下面的补丁版本和补丁版本编写客户端。
补丁版本下载,适用于python 3.x:http://www.gsm-guard.net/Archive/hbase-thrift-0.20.4.patch.tgz
卸载 hbase-thrift-0.20.4 版本
# pip3 列表 | grep hbase-thrift >> hbase-thrift 0.20.4 # pip3 卸载 hbase-thrift -y >> 成功卸载 hbase-thrift-0.20.4
安装hbase-thrift-0.20.4.patch版本(支持python3.x)
wget http://www.gsm-guard.net/Archive/hbase-thrift-0.20.4.patch.tgz tar -zxvf hbase-thrift-0.20.4.patch.tgzcd hbase-thrift-0.20.4.patch python3 www.gsm-guard.net install
检测是否安装成功
# pip3 列表 | grep hbase-thrift >> hbase-thrift 0.20.4.patch Python3.7 操作 hbase-thrift-patch 客户端代码示例 从 thrift.transport 导入 TSocket 从 thrift.transport.TTransport 导入 TBufferedTransport 从 thrift.protocol 导入 TBinaryProtocol 从 hbase 导入 Hbase 从 hbase.ttypes 导入 ColumnDescriptor 从 hbase.ttypes 导入突变 HBaseClient 类(对象): def __init__(自身): self.__ip = HBASE_URI.get("HOST") self.__port = HBASE_URI.get("PORT") self.__transport = self.createSocket 协议 = TBinaryProtocol.TBinaryProtocol(self.__transport) self.__client = Hbase.Client(协议) self.__www.gsm-guard.net() @财产 def createSocket(self): CS = TSocket.TSocket(self.__ip, self.__port) CS.setTimeout(60*1000) 返回 TBufferedTransport(CS) def __del__(自我): self.__transport.close()def get_tables(自身): ”“” 获取所有表名 :return: 表名列表 ”“” 返回 self.__client.getTableNames() def create_table(自身, 表, *列): ”“” 创建表 :param table: 表名 :param columns: 列名,变量参数 ”“” func = lambda col: ColumnDescriptor(col) 列族 = 列表(地图(函数,列)) self.__client.createTable(表,column_families) def delete_table(自身, 表): ''' 删除hbase中的表 :参数表:表名 :返回: ''' 如果 self.__client.isTableEnabled(表): self.__client.disableTable(表) self.__client.deleteTable(表) def put(自身,表,行,列): ”“” 添加记录 :param table: 表名 :参数行: :参数列: :返回: ”“” self.__client.mutateRow(table, row, [Mutation(column=k, value=v) for k, v in columns.items()])def删除(自身,表,行,列): ”“” 删除记录 :param table: 表名 :参数行: ”“” self.__client.deleteAll(表、行、列) def 扫描(自我,表,start_row =“”,列=无): ”“” 获取记录 :param table: 表名 :参数开始行: :参数列: ”“” 扫描仪 = self.__client.scannerOpen(表、起始行、列) 而真实: r = self.__client.scannerGet(扫描仪) 如果不是 r: 休息 yield dict([(k, v.value) for k, v in r[0].columns.items()]) 如果 __name__ == "__main__": 客户端 = HBaseClient() for v in client.scan('studentd', columns={"www.gsm-guard.net":"https://www.gsm-guard.net"}): 打印(五) 作者:www.gsm-guard.net
ps:python3.7连接hbase
pip安装thrift和hbase包
从 thrift.transport 导入 TSocket,TTransport 从 thrift.protocol 导入 TBinaryProtocol,TCompactProtocol 从 hbase 导入 Hbase 套接字 = TSocket.TSocket('10.1.21.35',端口=9090)socket.setTimeout(5000) 传输 = TTransport.TFramedTransport(socket) protocol = TBinaryProtocol.TBinaryProtocol(transport) //不使用该协议 协议 = TCompactProtocol.TCompactProtocol(传输) 客户端 = Hbase.Client(协议) 套接字.open() 表 = client.getTableNames() 打印(表格)
总结
以上是小编介绍的python3.7中通过thrift操作hbase的示例代码。希望对您有所帮助。如果您有任何疑问,请给我留言,编辑会及时回复您。也非常感谢大家对来客网网站的支持!
如果您认为本文对您有帮助,欢迎转载,请注明出处,谢谢!