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深度优先算法生成迷宫
Jan 22 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
Python pandas用法最全整理
Aug 04 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
python中从for循环延申到推导式的具体使用
Nov 29 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
基于python实现模拟数据结构模型
Jun 12 Python
只用40行Python代码就能写出pdf转word小工具
May 31 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伪静态的实现详细介绍
2013/04/28 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
php递归函数怎么用才有效
2018/02/24 PHP
PHP强制转化的形式整理
2020/05/22 PHP
jQuery 白痴级入门教程
2009/11/11 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
原生js获取宽高与jquery获取宽高的方法关系对比
2014/04/04 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
美国购买新书和二手书网站:Better World Books
2018/10/31 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
公务员综合考察材料
2014/02/01 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
安全生产警示教育活动总结
2015/05/09 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书