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


Posted in Python onJanuary 14, 2020

HBase是一个分布式的、面向列的开源数据库,其是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。其数据结构类似与Redis的key-value模式。

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

python3.7 通过 thrift , rpc 接口操作 hbase ,指定依赖库为: thrift 和 hbase-thrift 。 然而我们 在 python3.7 环境中发现 hbase-thrift-0.20.4 无法被支持, hbase-thrift 官方仅推荐用于 python2.x 。 于是有了下边的 patch 版本 和 patch 版本写法的客户端。

patch 版本下载,适用于 python 3.x : http://dl.cpp.la/Archive/hbase-thrift-0.20.4.patch.tgz

卸载 hbase-thrift-0.20.4 版本

# pip3 list | grep hbase-thrift
>> hbase-thrift    0.20.4
# pip3 uninstall hbase-thrift -y
>> Successfully uninstalled hbase-thrift-0.20.4

安装 hbase-thrift-0.20.4.patch 版本(支持 python3.x )

wget http://dl.cpp.la/Archive/hbase-thrift-0.20.4.patch.tgz
tar -zxvf hbase-thrift-0.20.4.patch.tgz
cd hbase-thrift-0.20.4.patch
python3 setup.py install

检测安装是否成功

# pip3 list | grep hbase-thrift
>> hbase-thrift    0.20.4.patch
Python3.7 操作 hbase-thrift-patch 客户端代码示例
from thrift.transport import TSocket
from thrift.transport.TTransport import TBufferedTransport
from thrift.protocol import TBinaryProtocol
 
from hbase import Hbase
from hbase.ttypes import ColumnDescriptor
from hbase.ttypes import Mutation
 
class HBaseClient(object):
 
  def __init__(self):
    self.__ip = HBASE_URI.get("HOST")
    self.__port = HBASE_URI.get("PORT")
    self.__transport = self.createSocket
    protocol = TBinaryProtocol.TBinaryProtocol(self.__transport)
    self.__client = Hbase.Client(protocol)
    self.__transport.open()
 
  @property
  def createSocket(self):
    CS = TSocket.TSocket(self.__ip, self.__port)
    CS.setTimeout(60*1000)
    return TBufferedTransport(CS)
 
  def __del__(self):
    self.__transport.close()
 
  def get_tables(self):
    """
    get all table name
    :return: table name list
    """
    return self.__client.getTableNames()
 
  def create_table(self, table, *columns):
    """
    create table
    :param table: table name
    :param columns: columns name , variable parameter
    """
    func = lambda col: ColumnDescriptor(col)
    column_families = list(map(func, columns))
    self.__client.createTable(table, column_families)
 
  def delete_table(self, table):
    '''
    delete table in hbase
    :param table: tableName
    :return:
    '''
    if self.__client.isTableEnabled(table):
      self.__client.disableTable(table)
    self.__client.deleteTable(table)
 
  def put(self, table, row, columns):
    """
    add record
    :param table: table name
    :param row:
    :param columns:
    :return:
    """
    self.__client.mutateRow(table, row, [Mutation(column=k, value=v) for k, v in columns.items()])
 
  def delete(self, table, row, column):
    """
    delete record
    :param table: table name
    :param row:
    """
    self.__client.deleteAll(table, row, column)
 
  def scan(self, table, start_row="", columns=None):
    """
    get record
    :param table: table name
    :param start_row:
    :param columns:
    """
    scanner = self.__client.scannerOpen(table, start_row, columns)
    while True:
      r = self.__client.scannerGet(scanner)
      if not r:
        break
      yield dict([(k, v.value) for k, v in r[0].columns.items()])
if __name__ == "__main__":
  client = HBaseClient()
  for v in client.scan('studentd', columns={"cpp.la":"https://cpp.la"}):
    print(v)
by:cpp.la

ps:python3.7连接hbase

pip安装thrift 和hbase 包

from thrift.transport import TSocket,TTransport
from thrift.protocol import TBinaryProtocol,TCompactProtocol
from hbase import Hbase
socket = TSocket.TSocket('10.1.21.35',port=9090)
socket.setTimeout(5000)
transport = TTransport.TFramedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocol(transport) //不使用这个协议
protocol = TCompactProtocol.TCompactProtocol(transport)
client = Hbase.Client(protocol)
socket.open()
table = client.getTableNames()
print(table)

总结

以上所述是小编给大家介绍的python3.7通过thrift操作hbase的示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
python删除列表中重复记录的方法
Apr 28 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
python中subprocess批量执行linux命令
Apr 27 Python
python批量复制图片到另一个文件夹
Sep 17 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
Python后台管理员管理前台会员信息的讲解
Jan 28 Python
python实现简单贪吃蛇游戏
Sep 29 Python
Python timeit模块原理及使用方法
Oct 10 Python
python实现ROA算子边缘检测算法
Apr 05 Python
Python PIL按比例裁剪图片
May 11 Python
解决pytorch DataLoader num_workers出现的问题
Jan 14 #Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 #Python
python重要函数eval多种用法解析
Jan 14 #Python
关于ResNeXt网络的pytorch实现
Jan 14 #Python
Python属性和内建属性实例解析
Jan 14 #Python
Python程序控制语句用法实例分析
Jan 14 #Python
dpn网络的pytorch实现方式
Jan 14 #Python
You might like
PHP删除数组中特定元素的两种方法
2013/07/02 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
vue中的provide/inject的学习使用
2018/05/09 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
python通过post提交数据的方法
2015/05/06 Python
python中管道用法入门实例
2015/06/04 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
Django urls.py重构及参数传递详解
2019/07/23 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
C#和SQL Server的面试题
2016/08/12 面试题
食品安全检查制度
2014/02/03 职场文书
工作迟到检讨书
2014/02/21 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
教师纪念9.18事件演讲稿范文
2014/09/14 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
学校端午节活动总结
2015/02/11 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
使用Springboot实现健身房管理系统
2021/07/01 Java/Android