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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
python实现连接mongodb的方法
May 08 Python
Python打包可执行文件的方法详解
Sep 19 Python
python 数据清洗之数据合并、转换、过滤、排序
Feb 12 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python实现windows倒计时锁屏功能
Jul 30 Python
python实现学生成绩测评系统
Jun 22 Python
Django DRF认证组件流程实现原理详解
Aug 17 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
Sep 29 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 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常用的缓存技术汇总
2014/05/05 PHP
php源码分析之DZX1.5随机数函数random用法
2015/06/17 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
分享php多功能图片处理类
2016/05/15 PHP
Zend Framework数据库操作技巧总结
2017/02/18 PHP
php使用imagecopymerge()函数创建半透明水印
2018/01/25 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
vue2.0 常用的 UI 库实例讲解
2017/12/12 Javascript
javascript实现最长公共子序列实例代码
2018/02/05 Javascript
vue项目实战总结篇
2018/02/11 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
JS组件库AlloyTouch实现图片轮播过程解析
2020/05/29 Javascript
js+cavans实现图片滑块验证
2020/09/29 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python爬取淘宝商品销量信息
2018/11/16 Python
pyqt远程批量执行Linux命令程序的方法
2019/02/14 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
2019/11/11 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
Python urllib.request对象案例解析
2020/05/11 Python
浅谈django框架集成swagger以及自定义参数问题
2020/07/07 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
工商管理专业职业生涯规划
2014/01/01 职场文书
库房保管员岗位职责
2014/04/07 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
大学生学习计划书
2014/09/15 职场文书