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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
python中函数传参详解
Jul 03 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
将python文件打包成EXE应用程序的方法
May 22 Python
python之当你发现QTimer不能用时的解决方法
Jun 21 Python
python 自定义装饰器实例详解
Jul 20 Python
django的model操作汇整详解
Jul 26 Python
关于Python不换行输出和不换行输出end=““不显示的问题(亲测已解决)
Oct 27 Python
Numpy ndarray 多维数组对象的使用
Feb 10 Python
详解PyTorch模型保存与加载
Apr 28 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
jQuery插件Validate实现自定义校验结果样式
2016/01/18 Javascript
Javascript实现单例模式
2016/01/24 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
总结AngularJS开发者最常犯的十个错误
2016/08/31 Javascript
Vue表单实例代码
2016/09/05 Javascript
ES6概念 ymbol.for()方法
2016/12/25 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
python避免死锁方法实例分析
2015/06/04 Python
Python中的super()方法使用简介
2015/08/14 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
python 用struct模块解决黏包问题
2020/11/07 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
卖房授权委托书样本
2014/10/05 职场文书
2014年物流工作总结
2014/11/25 职场文书
老舍《猫》教学反思
2016/02/17 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang