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中requests库session对象的妙用详解
Oct 30 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
python代码过长的换行方法
Jul 19 Python
Python中按键来获取指定的值
Mar 02 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
Python Web版语音合成实例详解
Jul 16 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
python误差棒图errorbar()函数实例解析
Feb 11 Python
使用npy转image图像并保存的实例
Jul 01 Python
Pycharm中如何关掉python console
Oct 27 Python
python绘图模块之利用turtle画图
Feb 12 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+mysql聊天室实现方法(附源码)
2016/01/05 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
2016/09/29 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
基于javascript 显式转换与隐式转换(详解)
2017/12/15 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
npm的lock机制解析
2019/06/20 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
js动态生成表格(节点操作)
2021/01/12 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
python使用win32com库播放mp3文件的方法
2015/05/30 Python
Python编程中NotImplementedError的使用方法
2018/04/21 Python
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
马云的职业生涯规划之路
2014/01/01 职场文书
高二政治教学反思
2014/02/01 职场文书
物业消防安全责任书
2014/07/23 职场文书
医院反腐倡廉演讲稿
2014/09/16 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
个人政治思想总结
2015/03/05 职场文书
社区文明倡议书
2015/04/28 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL