热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

7.python查询hbase2(一)

7.python查询hbase2(一),Go语言社区,Golang程序员人脉社
  • thrift环境准备
  • 连接
  • 查询
  • 扫描
  • 源码下载
thrift环境准备

hbase是接口API是java的,如果需要通过python来操作的话,可以使用thrift服务。使用thrift需要部署thrift接口服务和thrift客户端环境,thrift负责将操作请求翻译后调用Java API操作,客户端thrift负责序列化请求后传输。示意如下:

thrift结构

客户端和接口可以装在同一台机器上,也可以接口单独部署成接口服务集群,需要访问时客户机上安装个thrift客户端即可,常用的两种架构如下(参考文章):

集群模式——性能和可靠性好,线上服务最好这样部署

thrift集群部署

本地模式——比较灵活,数据分析自行开启thrift服务可采用这种方式

thrift本地部署

默认hbase thrift接口服务端口号9090,可在配置文件conf/hbase-site.xml中查看和修改thrift 接口服务的 IP 地址和端口号,如下


        hbase.master.hostname
        $thriftIP


        hbase.regionserver.thrift.port
        $port

开启接口服务很简单,直接运行如下指令

hbase/bin/hbase-daemon.sh start thrift1

客户端环境准备如下:

  • 安装thrift,mac和windows可直接安装,linux下需要编译,[参考]
  • 安装python操作thrift库,如下
pip install thrift
  • 安装python操作hbase库

注意这个很重要,网上教程很多要求如下安装

pip install hbase-thrift

这个虽然能操作,但是这个库还是2010更新的,很多新特性都不支持,最好方法是找到当前安装hbase2.0的环境,找到如下文件hbase/lib/hbase-thrift-2.*.jar,解压后,如下目录,取出thrift/Hbase.thrift文件,这是thrift的IDL定义文件,如下生成python hbase操作库

thrift -gen py ./Hbase.thrift

当前目录下gen-py中hbase目录拷贝出来即为python连接hbase库。这个方法能保证python hbase库始终是和当前版本最匹配的。

如果不想这么麻烦,直接使用附件代码中已经编译好的hbase库也可,只是如果要使用最新的hbase python接口还是需要自己生成的。

thrift定义目录

连接

遵循python thrift标准连接方法如下:

from thrift.transport import TSocket,TTransport
from thrift.protocol import TBinaryProtocol

from hbase import Hbase
from hbase.ttypes import TScan

# thrift默认端口是9090
socket = TSocket.TSocket('10.202.209.72',9090)
socket.setTimeout(5000)

transport = TTransport.TBufferedTransport(socket)
protocol = TBinaryProtocol.TBinaryProtocol(transport)

client = Hbase.Client(protocol)
transport.open()

# do something

transport.close()
查询

最新python 支持多行和当行查询,满足大多数需求,如下:

# 获取表名列表
print client.getTableNames()

# 获取指定rowkey指定列族信息
ts = client.get('table1', 'row_key1', 'c1', None)
for t in ts:
    print t.value

# 获取指定rowkey全部信息    
rows = client.getRow('table1', 'row_key1', None)
for row in rows:
    for k,v in row.columns.items():
        print "%s=>%s" %(k.split(':')[1], v.value)
        
rows = client.getRows('table1', ['row_key1', 'row_key2'], None)
for row in rows:
    for k,v in row.columns.items():
        print "%s=>%s" %(k.split(':')[1], v.value)
扫描

对于复杂查询或分页等需求需要通过扫描实现,如下

# 指定开始和结束row_key扫描     
sid = client.scannerOpenWithStop('table1', b'000', b'002', ['c1'], None)
res = client.scannerGetList(sid, 10)
print res
client.scannerClose(sid)

# 指定filter扫描
s = TScan()
s.filterString = "(PrefixFilter ('000') AND (QualifierFilter (=, 'binary:m')))"
sid = client.scannerOpenWithScan('table1', s, None)
res = client.scannerGetList(sid, 10)
print res
client.scannerClose(sid)

第一个指定开始和结束row_key扫描,第二个指定filter来扫描,python hbase库没有对应函数实现传入filter参数的功能,必须通过这种迂回的方式。sid对应的scanner标记通过scannerGet获取全部结构,scannerGetList获取指定条记录。

源码下载

演示源码下载链接

本文只演示了查询,其他操作可参考腾讯文档

原创,转载请注明来自

  • 博客https://blog.csdn.net/wenzhou1219
  • 个人网站http://jimwen.net/

推荐阅读
  • 本文详细介绍了在PHP中如何获取和处理HTTP头部信息,包括通过cURL获取请求头信息、使用header函数发送响应头以及获取客户端HTTP头部的方法。同时,还探讨了PHP中$_SERVER变量的使用,以获取客户端和服务器的相关信息。 ... [详细]
  • Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ... [详细]
  • 本项目使用Java语言开发了一个基于B/S架构的指纹识别系统,该系统能够实现指纹的高效采集与精准识别,适用于多种安全认证场景。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 微服务自动化.dockercompose
    目录一、docker-compose二、docker-compose安装与配置1、修改docker.service2、下载文件3、将刚才下载的docker-compose文 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 本文定期更新,涵盖虚拟化技术的基础知识、Xen虚拟机架构详解、KVM架构与原理、QEMU模拟器的功能及使用方法。同时,文章还探讨了不同虚拟化技术之间的比较与联系,以及如何利用这些技术进行网络配置和虚拟磁盘管理。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • 本文探讨了使用Python实现监控信息收集的方法,涵盖从基础的日志记录到复杂的系统运维解决方案,旨在帮助开发者和运维人员提升工作效率。 ... [详细]
  • 本文详细介绍了 Node.js 中 OS 模块的 arch 方法,包括其功能、语法、参数以及返回值,并提供了具体的使用示例。 ... [详细]
  • 近期在研究Java IO流技术时,遇到了一个关于如何正确读取Doc文档而不出现乱码的问题。本文将详细介绍使用Apache POI库处理Doc和Docx文件的具体方法,包括必要的库引入和示例代码。 ... [详细]
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 本文由公众号【数智物语】(ID: decision_engine)发布,关注获取更多干货。文章探讨了从数据收集到清洗、建模及可视化的全过程,介绍了41款实用工具,旨在帮助数据科学家和分析师提升工作效率。 ... [详细]
author-avatar
美好生活的日子
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有