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 相关文章推荐
python3新特性函数注释Function Annotations用法分析
Jul 28 Python
在CMD命令行中运行python脚本的方法
May 12 Python
pygame游戏之旅 游戏中添加显示文字
Nov 20 Python
Python Pandas分组聚合的实现方法
Jul 02 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
python将print输出的信息保留到日志文件中
Sep 27 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
Tensorflow分批量读取数据教程
Feb 07 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
Qt自定义Plot实现曲线绘制的详细过程
Nov 02 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
PHP中的类型提示(type hinting)功能介绍
2015/07/01 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
Laravel使用支付宝进行支付的示例代码
2017/08/16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
Jquery 表格合并的问题分享
2011/09/17 Javascript
jQuery EasyUI API 中文文档 - ComboTree组合树
2011/10/11 Javascript
用正则表达式替换图片地址img标签
2013/11/22 Javascript
javascript动态控制服务器控件实例
2014/09/05 Javascript
jquery实现submit提交表单
2015/02/03 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
详解React-Todos入门例子
2016/11/08 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
基于Vue开发数字输入框组件
2017/12/19 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
新手简单了解vue
2019/05/29 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python中执行shell的两种方法总结
2017/01/10 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
区分python中的进程与线程
2020/08/13 Python
python实现xml转json文件的示例代码
2020/12/30 Python
HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvas 绘制精美的图
2015/08/31 HTML / CSS
30年同学聚会感言
2014/01/30 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
高一地理教学工作总结
2015/08/12 职场文书
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
什么是SOLID
2022/03/24 Javascript
iOS 16进一步确认,一共支持16款iPhone
2022/04/28 数码科技
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers