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完全新手教程
Feb 08 Python
python生成器的使用方法
Nov 21 Python
python生成日历实例解析
Aug 21 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
详解python如何引用包package
Jun 07 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
Python实现byte转integer
Jun 03 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文字水印和php图片水印实现代码(二种加水印方法)
2013/12/25 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
JS实现的简单四则运算计算器功能示例
2017/09/27 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
Vue的自定义组件不能使用click方法的解决
2020/07/28 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
让Python代码更快运行的5种方法
2015/06/21 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python和js交互调用的方法
2020/06/23 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
2020/11/20 Python
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
大学活动策划书范文
2014/01/10 职场文书
中英文求职信范文
2014/01/27 职场文书
餐饮营销方案
2014/02/23 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
2014年电厂工作总结
2014/12/04 职场文书
小学元宵节活动总结
2015/02/06 职场文书
党员个人总结范文
2015/02/14 职场文书
员工安全责任协议书
2016/03/22 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python