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中偏函数partial用法实例分析
Jul 08 Python
Python中列表和元组的使用方法和区别详解
Dec 30 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
Python 常用模块 re 使用方法详解
Jun 06 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
python 5个顶级异步框架推荐
Sep 09 Python
python中remove函数的踩坑记录
Jan 04 Python
python 装饰器重要在哪
Feb 14 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
基于asp+ajax和数据库驱动的二级联动菜单
2010/05/06 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
JavaScript 变量作用域分析
2011/07/04 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
element vue validate验证名称重复 输入框与后台重复验证 特殊字符 字符长度 及注意事项小结【实例代码】
2018/11/20 Javascript
JavaScript中的连续赋值问题实例分析
2019/07/12 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
浅析 Vue 3.0 的组装式 API(一)
2020/08/31 Javascript
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
pytorch 在sequential中使用view来reshape的例子
2019/08/20 Python
python处理RSTP视频流过程解析
2020/01/11 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
培训楼经理岗位责任制
2014/02/10 职场文书
医疗专业毕业生求职信
2014/08/28 职场文书
企业三严三实学习心得体会
2014/10/13 职场文书
品质保证书格式
2015/02/28 职场文书
应聘教师自荐信
2015/03/26 职场文书
公司搬迁通知
2015/04/20 职场文书
六年级作文之自救
2019/12/19 职场文书
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python