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 相关文章推荐
在Docker上开始部署Python应用的教程
Apr 17 Python
Python实现ping指定IP的示例
Jun 04 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
python批量创建指定名称的文件夹
Mar 21 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
opencv3/python 鼠标响应操作详解
Dec 11 Python
python3实现飞机大战
Nov 29 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
Python获取百度热搜的完整代码
Apr 07 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 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类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
php轻松实现文件上传功能
2016/03/03 PHP
redirect_uri参数错误的解决方法(必看)
2017/02/16 PHP
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
javascript实现切换td中的值
2014/12/05 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
JavaScript字符串对象
2017/01/14 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
vue.js的手脚架vue-cli项目搭建的步骤
2017/08/30 Javascript
详解js正则表达式验证时间格式xxxx-xx-xx形式
2018/02/09 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
js获取url页面id,也就是最后的数字文件名
2020/09/25 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
python获取文件路径、文件名、后缀名的实例
2018/04/23 Python
Python实现的删除重复文件或图片功能示例【去重】
2019/04/23 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
建龙钢铁面试总结
2014/04/15 面试题
会计简历自我评价
2015/03/10 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
六一儿童节致辞
2015/07/31 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书