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中的自定义函数学习笔记
Sep 23 Python
Python 自动补全(vim)
Nov 30 Python
Python制作Windows系统服务
Mar 25 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
python Spyder界面无法打开的解决方法
Apr 27 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
Python爬虫小例子——爬取51job发布的工作职位
Jul 10 Python
Python实现打包成库供别的模块调用
Jul 13 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
Python基本数据类型之字符串str
Jul 21 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实现与ASP Banner组件相似的类
2006/10/09 PHP
mysql5写入和读出乱码解决
2006/11/25 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
Javascript Throttle & Debounce应用介绍
2013/03/19 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
移动端js图片查看器
2016/11/17 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
原生js封装添加class,删除class的实例
2017/11/06 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
python创建和使用字典实例详解
2013/11/01 Python
Python去掉字符串中空格的方法
2014/03/11 Python
python实现ping的方法
2015/07/06 Python
socket + select 完成伪并发操作的实例
2017/08/15 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
python批量修改交换机密码的示例
2020/09/22 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
团支部建设方案
2014/05/02 职场文书
中专生自荐信
2014/06/25 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS