Python 操作 HBase 最佳实践

2024-06-12 21:58

本文主要是介绍Python 操作 HBase 最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这几天玩了一下Python,不得不说Python真的很好用,但同时也遇到了很多坑。这里主要分享通过Python的happybase模块查询HBase的实践。因为HBase rowkey规则要依赖一个外包jar包,因此也涉及到通过jpype模块在Python中使用Java(这块也是不得已为之)。Python从小白到入门,描述不对的地方请多指出。

关键词:happybase,jpype

1. 介绍

我们知道Python操作HBase通过thrift方式,因此要求HBase服务端先启动ThriftServer服务(这里不多说了)。happybase是一个与HBase交互的Python库,底层使用了Python的thrift包操作HBase。

下面我们从0到1讲述Python访问HBase的实践!还会介绍如何调用Java工具类生成HBase rowkey。

2. 环境准备

2.1.安装 happybase

在线安装

先检查happybase模块是否已安装。Python安装happybase:

# pip install happybase

这里会自动安装thriftpy2依赖,也可以先在线安装thriftpy2。

★建议可以在线安装的先尝试在线安装,毕竟方便

离线安装

有时候我们的部署节点连不上外网,无法在线安装时,这时可以离线安装依赖。[在线安装不用理会这部分]

离线安装happybase要先安装依赖thriftpy2,比如happybase1.2.0依赖thriftpy2>=0.4:

# pip install thriftpy2-0.4.8.tar.gz# pip install happybase-1.2.0.tar.gz

https://pypi.org/project/thriftpy2/#files https://pypi.org/project/happybase/#files

相关依赖包下载地址如上。请记住这个Python软件包仓库地址:https://pypi.org

2.2.安装 jpype

★如果不涉及在Python中调用Java,这部分可以跳过!

我们选择离线安装jpype(在线会遇到错误,可能与文件类型有关系)。jpype依赖numpy模块,因此要先安装numpy,可以在线或者离线安装。

# pip install numpy# pip install JPype1-0.7.0.tar.gz

https://pypi.org/project/JPype1/#files

注意:

上述离线安装是在linux环境下,如果是windows本地环境,是 JPype1-****.whl 文件,有两个注意点:

  • 检查并确认安装了 wheel 模块,用于安装whl文件(建议在线安装 wheel)

  • 查看Python支持的whl文件类型,下载相应JPype1包,如:

D:\soft\Python>python.exe>>> import pip; print(pip.pep425tags.get_supported())

https://www.lfd.uci.edu/~gohlke/pythonlibs/

还要注意本地安装的Python是32位还是64位的,对应下载。

3. 操作实践

3.1.使用 happybase 查询数据

· 创建HBase连接

connection = happybase.Connection('thriftserver的IP', 9090, table_prefix=b'ns1',table_prefix_separator=b':')

· 查询(GET)数据

table = connection.table(tablename)

# row_key = b'\x01\x91!\x02\x00\x00\x00\x04007720181210'
row = table.row(row_key)

if row.__len__() != 0:
print(row[b'f:column1']) # 输出bytes
print(row.get(b'f:column1', '').decode()) # 输出string

· 关闭HBase连接

connection.close()
 

除了通过row方法get数据外,happybase还支持scan,put,delete等各种常规操作。此外还支持batch操作。happybase官方文档可以访问:

https://happybase.readthedocs.io/en/latest/index.html

 happybase还支持连接池的方式访问HBase:

https://happybase.readthedocs.io/en/latest/user.html#using-the-connection-pool

 这部分全是API使用方面的,比较容易理解,一般查看文档就能完成。

3.2.引用 Java 类处理 Rowkey

在3.1中我们使用了row_key这个变量,实际上row_key是pk_id经过一个MD5Util生成的。我们要在Python中使用MD5这个工具类。

注:数据写入时使用了第3方的MD5Util……历史原因

前面说了要利用Jpype模块实现,以下可以说是JPype的使用手册。

引入相关jar

jars = ["/app/lib/**-1.2.0.jar:/app/lib/commons-codec-1.9.jar"]jvm_classpath = "-Djava.class.path={}".format(":".join(jars))

启动JVM

if not jpype.isJVMStarted():    jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", jvm_classpath)

设置JVM参数:

jpype.startJVM(jpype.getDefaultJVMPath(), "-Xms32m", "-Xmx256m", "-ea", jvm_classpath)

引用Java类

MD5Util = JClass("com.****.MD5Util")
BytesUtil = JClass("com.****.BytesUtil")
rowkey_bs = MD5Util.getHashBytes(BytesUtil.toBytes(pk_id))

类型转换

这里涉及到一个类型转换,将Java返回的byte[],即字节数组,转换成Python中的bytes,即字节串。这个转换也值得一记。

Hex = JClass("org.apache.commons.codec.binary.Hex")
row_key = bytes.fromhex(Hex.encodeHexString(rowkey_bs))

至此,我们实现了rowkey的转换:string -> byte[] -> bytes

另外,我们启动了JVM但没有关闭,这里是不想重复启动JVM,实际使用的时候还可以打印一些日志来描述JVM的状态。

4. 结束语

本文我们使用Python提供的happybase包进行了HBase查询,并且通过jpype实现了在Python中使用Java代码。说起来其实happybase API使用比较简单,主要是一些细节的处理,比如外部包引用、类型转换等。

 
往期推荐

1、HBase最佳实践 | 聊聊HBase核心配置参数
2、Apache Hudi:剑指数据湖的增量处理框架
3、Hadoop社区比 Ozone 更重要的事情
4、MapReduce Shuffle 和 Spark Shuffle 结业篇

 

这篇关于Python 操作 HBase 最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055452

相关文章

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MySQL 迁移至 Doris 最佳实践方案(最新整理)

《MySQL迁移至Doris最佳实践方案(最新整理)》本文将深入剖析三种经过实践验证的MySQL迁移至Doris的最佳方案,涵盖全量迁移、增量同步、混合迁移以及基于CDC(ChangeData... 目录一、China编程JDBC Catalog 联邦查询方案(适合跨库实时查询)1. 方案概述2. 环境要求3.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过