热门标签 | 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/

推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
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社区 版权所有