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中字典的键的使用
Aug 19 Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 Python
Python输出\u编码将其转换成中文的实例
Dec 15 Python
python实现简单图片物体标注工具
Mar 18 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
python多任务之协程的使用详解
Aug 26 Python
python的等深分箱实例
Nov 22 Python
对tensorflow中cifar-10文档的Read操作详解
Feb 10 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
利用python进行文件操作
Dec 04 Python
python神经网络ResNet50模型
May 06 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 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
zend framework多模块多布局配置
2011/02/26 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
超实用的javascript时间处理总结
2016/08/16 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
js实现随机点名程序
2020/09/17 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
Python @property及getter setter原理详解
2020/03/31 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
Reformation官网:美国女装品牌
2018/09/14 全球购物
英国最大的在线时尚眼镜店:Eyewearbrands
2019/03/12 全球购物
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
理想点亮人生演讲稿
2014/05/21 职场文书
坎儿井导游词
2015/02/09 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技