首页 - 通讯 - 通过thrift操作hbase的Python3.7示例代码

通过thrift操作hbase的Python3.7示例代码

2023-10-10 13:24

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的示例代码。希望对您有所帮助。如果您有任何疑问,请给我留言,编辑会及时回复您。也非常感谢大家对来客网网站的支持!
如果您认为本文对您有帮助,欢迎转载,请注明出处,谢谢!