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的keyword模块用法实例分析
Jun 30 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 Python
django框架cookie和session用法实例详解
Dec 10 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
浅谈Python 参数与变量
Jun 20 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
python 下载文件的多种方法汇总
Nov 17 Python
Python logging自定义字段输出及打印颜色
Nov 30 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 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从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
JS短路原理的应用示例 精简代码的途径
2013/12/13 Javascript
浅析jquery的js图表组件highcharts
2014/03/06 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
详解基于vue的移动web app页面缓存解决方案
2017/08/03 Javascript
快速解决angularJS中用post方法时后台拿不到值的问题
2018/08/14 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
详解Python3.6安装psutil模块和功能简介
2018/05/30 Python
图文详解python安装Scrapy框架步骤
2019/05/20 Python
pytorch的batch normalize使用详解
2020/01/15 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
升学宴主持词
2014/04/02 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL