当前位置: 首页 > news >正文

python连接hbase

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

python通过thrift连接hbase

安装thrift

pip install thrift

编译thrift hbase idl文件

thrift提供了两个版本的idl文件:https://github.com/apache/hbase/tree/master/hbase-thrift/src/main/resources/org/apache/hadoop/hbase

首先,thrift2 模仿了 HBase Java API 的数据类型和方法定义,调用方式更人性化一些。比如,构建一个 Get 操作的 Java 代码是:

Get get = new Get(Bytes.toBytes("rowkey"));
get.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col1"));
get.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("col2"));

在 thrift2 中有对应的 TGet 类型:

tget = TGet(
    row='rowkey',
    columns=[
        TColumn(family='cf', qualifier='col1'),
        TColumn(family='cf', qualifier='col2'),
    ]
)

如果使用旧版的 thrift,我们就需要直接调用其众多的 get 方法之一了:

client.getRowWithColumns(
    tableName='tbl',
    row='rowkey',
    columns=['cf:col1', 'cf:col2'],
    attributes=None
)

第二个不同点在于 thrift2 目前尚缺少 HBase 管理相关的接口,如 createTable、majorCompact 等。这些 API 仍在开发过程中,因此如果你需要通过 Thrift 来建表或维护 HBase,就只能使用旧版的 thrift 了。

决定了使用哪个版本的描述文件后,我们就可以将 hbase.thrift 下载到本地,通过它来生成 Python 代码。

thrift -gen py hbase.thrift

生产结果文件夹gen-py,内容如下:

gen-py/hbase/__init__.py
gen-py/hbase/constants.py
gen-py/hbase/THBaseService.py
gen-py/hbase/ttypes.py

cp里面文件到指定python安装目录site-packages里

cp -R hbase /usr/lib/python2.7/site-packages/

查询数据

thrift

from thrift import Thrift
from thrift.transport import TSocket, TTransport
from thrift.protocol import TBinaryProtocol
from hbase import Hbase
 
#server端地址和端口,web是HMaster也就是thriftServer主机名,9090是thriftServer默认端口
transport = TSocket.TSocket('web', 9090)
#可以设置超时
transport.setTimeout(5000)
#设置传输方式(TFramedTransport或TBufferedTransport)
trans = TTransport.TBufferedTransport(transport)
#设置传输协议
protocol = TBinaryProtocol.TBinaryProtocol(trans)
#确定客户端
client = Hbase.Client(protocol)
#打开连接
transport.open()
 
from hbase.ttypes import ColumnDescriptor, Mutation, BatchMutation, TRegionInfo
from hbase.ttypes import IOError, AlreadyExists
 
#获取表名
client.getTableNames()

#api说明https://blog.csdn.net/y472360651/article/details/79055875

thrift2

from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
from thrift.transport import TTransport
from hbase import THBaseService

transport = TTransport.TBufferedTransport(TSocket.TSocket('127.0.0.1', 9090))
protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
client = THBaseService.Client(protocol)
transport.open()
# 使用 client 实例进行操作
from hbase.ttypes import TPut, TColumnValue, TGet
tput = TPut(
    row='sys.cpu.user:20180421:192.168.1.1',
    columnValues=[
        TColumnValue(family='cf', qualifier='1015', value='0.28'),
    ]
)
client.put('tsdata', tput)

tget = TGet(row='sys.cpu.user:20180421:192.168.1.1')
tresult = client.get('tsdata', tget)
for col in tresult.columnValues:
    print(col.qualifier, '=', col.value)
transport.close()

#api说明https://blog.csdn.net/zjerryj/article/details/80045657

 

转载于:https://my.oschina.net/u/2000675/blog/3034351

相关文章:

  • 函数计算新功能-----支持C#函数
  • 记一次内存溢出的分析经历
  • 求唯一一个只出现一次的数字
  • Java设计模式--装饰器模式到Java IO 流
  • 【iOS工具】快速上传ipa文件到iTunes Connect
  • 使用DataWorks调度DLA循环任务
  • postgresql行列转换函数
  • SQL中IF和CASE语句
  • Python Day3
  • [20190416]完善shared latch测试脚本2.txt
  • Windows下如何更新 node.js
  • 美团数据调优指北【转载】
  • 如何给列表降维?sum()函数的妙用
  • 好程序员分享JQuery.get提交页面不跳转的解决方法
  • QT 栅格布局
  • JavaScript-如何实现克隆(clone)函数
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • ERLANG 网工修炼笔记 ---- UDP
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java基本数据类型之Number
  • Linux Process Manage
  • Promise面试题2实现异步串行执行
  • tensorflow学习笔记3——MNIST应用篇
  • Vue.js-Day01
  • Vue--数据传输
  • webpack+react项目初体验——记录我的webpack环境配置
  • Zsh 开发指南(第十四篇 文件读写)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 欢迎参加第二届中国游戏开发者大会
  • 前端
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用SAX解析XML
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 再谈express与koa的对比
  • kubernetes资源对象--ingress
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (11)MSP430F5529 定时器B
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (HAL库版)freeRTOS移植STMF103
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (九十四)函数和二维数组
  • (一)基于IDEA的JAVA基础10
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转载)从 Java 代码到 Java 堆
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化