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的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
Python语言的变量认识及操作方法
Feb 11 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
python之pexpect实现自动交互的例子
Jul 25 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
如何在Python对Excel进行读取
Jun 04 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
教你如何用python操作摄像头以及对视频流的处理
Oct 12 Python
python中的None与NULL用法说明
May 25 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
thinkphp命名空间用法实例详解
2015/12/30 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
关于JavaScript与HTML的交互事件
2013/04/12 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
jQuery给动态添加的元素绑定事件的方法
2015/03/09 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
浅析Ajax语法
2016/12/05 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
JS实现读取xml内容并输出到div中的方法示例
2018/04/19 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
vue-router的hooks用法详解
2020/06/08 Javascript
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
python3字符串输出常见面试题总结
2020/12/01 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
this关键字的含义
2015/04/08 面试题
行政主管职责范本
2014/03/07 职场文书
管理建议书范文
2014/05/13 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
庆七一晚会主持词
2015/06/30 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
农贸批发市场管理制度
2015/08/07 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python
pytorch 使用半精度模型部署的操作
2021/05/24 Python
阿里云日志过滤器配置日志服务
2022/04/09 Servers