HBase的Python API(happybase)操作

news2024/9/28 18:13:53

一、Windows下安装Python库:happybase

pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple

二、 开启HBase的Thrift服务

想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如下命令,开启HBase的Thrfit服务。

# 安装Thrift服务所需要的一系列依赖软件
yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel
# 进入hbase安装目录下的bin目录
cd /usr/local/hbase-2.5.6/bin
#启动Thrift
hbase-daemon.sh start thrift
#jps查看进程
jps

至此启动Thrift服务并安装了HappyBase库后,即可用python代码连接HBase了。

注意:HBase Thrift的端口默认在9090 。 

三、使用python连接HBase

(1)在pycharm新建一个pythonProject项目。

(2)在pythonProject项目下新建一个python文件,编写连接Hbase的python代码。

#1.导入happybase库
import happybase
#2.建立HBase的连接
conn = happybase.Connection(
    host="192.168.25.200",   #主机名
    port=9090,      #Thrift的默认端口号
    timeout=60000   #超时时间
)
#3.通过conn对象,调用tables方法,获取hbase中的表格
print(conn.tables())
#4.关闭连接
conn.close()

注意:如果运行结果报错显示无法连接到虚拟机节点,则需要检查你的虚拟机是否已经关闭防火墙,如果防火墙为开启状态,需要关闭防火墙:systemctl stop firewalld.service 。

四、任务需求分析及HBase表格设计

(1)需求说明

某某自来水公司,需要存储大量的缴费明细数据。以下截取了缴费明细的一部分内容:

我们有如上数据集,需要将其导入到HBase中即可,具体数据集文件存放在百度网盘:

链接:https://pan.baidu.com/s/14n-2XoXyxZL7hN80cNTJMw 
提取码:qavu

(2)HBase表格设计

表名:WATER_BILL
行键(RowKey)列族:user列族:order
列限定符单元格值列限定符单元格值
4944191name登卫红pay_time2020-5-10
4944191addr贵州省铜仁市德江县7单元267室current_count308.1
4944191sexlast_count283.1
4944191usage25
4944191total_money150
4944191check_date2020-4-25
4944191latest_pay_date2020-6-9
................

 五、使用Python API创建HBase表格

'''
水表业务:
Hbase表格的创建
'''
#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#设置水费表格的名称为WATER_BILL(注意:在HBase API代码中,数据都是以Bytes字节数组的形式操作)
table_name = b"WATER_BILL"
#创建表格WATER_BILL(先检查表格是否存在,不存在则创建)
#通过conn连接对象的tables()可以获取全部的表格
tbs = conn.tables()
#if判断table_name是否在tbs中
if table_name in tbs:
    print(f"{table_name}已存在,无需创建")
else:
    print(f"{table_name}不存在,请创建它。")
    conn.create_table(
        table_name.decode(),     #将字节字符串转为普通字符串
        {
            'user':dict(max_versions = 5),  #列族信息
            'order':dict()                 #列族信息
        }
    )
#打印当前的表格信息
print(f"当前的表格:{conn.tables()}")
#关闭连接
conn.close()

六、使用Python API插入数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#往"WATER_BILL"表格内插入数据(读取文件的每行数据)
water_table = conn.table("WATER_BILL")
for line in open("WATER_BILL.TSV",encoding="UTF-8"):
    line = line.replace("\n","")
    # print(line)
    arrs = line.split('\t')
    # print(arrs)
    rowkey = arrs[0].encode()#行键
    data = {
        b'user:name':arrs[1].encode(),
        b'user:addr': arrs[2].encode(),
        b'user:sex': arrs[3].encode(),
        b'order:pay_time': arrs[4].encode(),
        b'order:current_count': arrs[5].encode(),
        b'order:last_count': arrs[6].encode(),
        b'order:usage': arrs[7].encode(),
        b'order:total_money': arrs[8].encode(),
        b'order:check_date': arrs[9].encode(),
        b'order:latest_pay_time': arrs[10].encode(),
    }
    water_table.put(rowkey,data)

七、使用Python API查询数据

#1.导入happybase库
import happybase
#2.建立HBase的连接
conn = happybase.Connection(
    host="192.168.25.200",   #主机名
    port=9090,      #Thrift的默认端口号
    timeout=60000   #超时时间
)
#3.通过conn对象,调用table方法,获取WATER_BILL表格
water_table = conn.table('WATER_BILL')
#查询数据
row = water_table.row(b'9054826')
# print(row)
# print(type(row))
for key in row.keys():
    print(f"列族:列限定符:{key.decode()},value:{row[key].decode()}")
#4.关闭连接
conn.close()

八、使用Python API删除数据

#导入happybase库
import happybase
#构建Hbase的连接
conn = happybase.Connection(
    host = "192.168.25.200",  #主机IP
    port = 9090
)
#获取表格对象
water_table = conn.table('WATER_BILL')
#删除表格的指定子列数据
water_table.delete(b'9054826',columns=[b'user:sex',b'order:usage'])
#删除表格的某一行数据(一个rowkey)
water_table.delete(b'9054826')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1550503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(4)(4.3) Kogger Sonar

文章目录 前言 1 推荐硬件 2 配置回声探测仪模块 3 连接ArduPilot硬件 4 参数说明 前言 KOGGER 声纳(KOGGER Sonar)是一款结构紧凑、成本低廉的水下回声测深仪模块,带有 UART 接口,电源电压为 5-14v。 1 推荐硬件 CP210x USB->UART 转换器和安装…

其实StartAI也是一款修图工具 用StartAI修图之“去除背景”

其实StartAI不仅仅是一款AI绘画插件,更是一款可以对我们的摄影图片、广告海报进行修图的AI修图工具。StartAI包含了AI绘画、AI修图等多种复合型AI智能实用工具。 用【背景移除】功能对图片一个背景修图 1.实体广告图片 我们可以通过【背景移除】将广告图中的实体…

在 Windows 11 上安装 MongoDB

MongoDB 是一个流行的 NoSQL 数据库,它提供了灵活的数据存储方案,而 MongoDB Compass 则是一个可视化管理工具,可以更轻松地与 MongoDB 数据库交互和管理。在本文中,我们将介绍如何在 Windows 11 上安装 MongoDB,并配置…

好看又好用,这 10 个宝藏 App 免费拿走不谢!

目录 1. 综合AI工具箱——HuluAI 2. 文本视频生成工具——Jujilu 3.翻译软件 —— TTime 4.专业录屏和直播软件 —— OBS Studio 5.开源跨平台轻量计时软件 —— wnr 6.开源跨平台绘图 —— Drawio 7.开源三维建模动画渲染 —— Blender 8.跨平台的多功能软件 —— Pear…

C 语言贪吃蛇源码解析

贪吃蛇是一款经典的电子游戏,玩家控制一条不断成长的蛇,需要避免撞到自己的身体或者游戏边界,同时吃掉出现在屏幕上的食物以增长身体长度。 下面是一个简单的贪吃蛇游戏的C语言实现,使用了标准输入输出库conio.h和时间库windows.h…

【C++】1323. 扩建花圃问题

问题:1323. 扩建花圃问题 类型:整数运算 题目描述: 梅山小学有一块长方形花圃(花圃的长宽都是整数),长 m 米,宽未知。 在修建校园时,花圃的长增加了 n 米,此时发现增加…

Mybatis-获取参数值的两种方式

1. ${ } 和 #{ } MyBatis获取参数值的两种方式:${ } 和 #{ } 对于初学者来说,理解MyBatis中获取参数值的两种方式——#{}和${},关键在于明白它们如何影响SQL语句的构建以及为何在安全性、灵活性上有显著差异。下面我将用简单易懂的语言来解…

SpringBoot+Prometheus+Grafana实现应用监控和报警

一、背景 SpringBoot的应用监控方案比较多&#xff0c;SpringBootPrometheusGrafana是目前比较常用的方案之一。它们三者之间的关系大概如下图&#xff1a; 关系图 二、开发SpringBoot应用 首先&#xff0c;创建一个SpringBoot项目&#xff0c;pom文件如下&#xff1a; <…

java数据结构与算法刷题-----LeetCode540. 有序数组中的单一元素

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 异或运算2. 全数组二分查找异或奇偶3. 偶数下标二分查找 1. 异…

Python学习之-正则表达式

目录 前言&#xff1a;1.re.serach1.1例子&#xff1a; 2.re.match2.1示例1&#xff1a;2.2 示例2&#xff1a; 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1&#xff1a;4.2 示例2: 5.re.split5.1 示例1:5.2 示例2&#xff1a;5.3 示例3&#xff1a; 6.re.sub6.1 示例&#…

puzzle(1122)连线迷宫

目录 一&#xff0c;连线迷宫-经典模式 1&#xff0c;规则 2&#xff0c;策略 3&#xff0c;调整的局部性 4&#xff0c;八连通端点的线条合并 taptap小游戏 迷宫解谜 连线迷宫模式 一&#xff0c;连线迷宫-经典模式 1&#xff0c;规则 2&#xff0c;策略 分2步&#x…

脚本应使用项目的主要语言编写

原文&#xff1a;Joo Freitas - 2024.03.24 这是我长时间以来的一个深感赞同的观点。 我参与过的几乎所有项目&#xff0c;都有我们编写的用于自动化重复性过程的脚本。然而&#xff0c;大多数脚本在几周后变得过时且难以维护&#xff0c;因为我们要么不再需要它们&#xff0…

Golang hash/crc32 库实战指南:从基础到优化

Golang hash/crc32 库实战指南&#xff1a;从基础到优化 引言理解CRC32hash/crc32库概览实战技巧数据校验性能优化多线程应用 错误处理与调试错误处理调试 实际案例分析结论 总结重点回顾 引言 在现代软件开发中&#xff0c;数据的完整性和安全性至关重要。无论是数据库存储、…

计算机组成原理 — 指令系统

指令系统 指令系统指令的概述指令的格式指令的字长取决于 操作数类型和操作种类操作数的类型数据在存储器中的存放方式操作类型 寻址方式指令寻址数据寻址立即寻址直接寻址隐含寻址间接寻址寄存器寻址寄存器间接寻址基址寻址变址寻址堆栈寻址 RISC 和 CISC 技术RISC 即精简指令…

K8s Pod亲和性、污点、容忍度、生命周期与健康探测详解(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 在上一章节中&#xff0c;我们详细探讨了Pod的概念、创建、…

linux X11窗口开发

X11 控制窗口 窗口信息查询 检索窗口信息工具 xprop xprop执行后会出现一个光标&#xff0c;这个光标可以获取到窗口信息 X11 获取窗口信息&#xff0c;操作窗口 X11 遍历获取当前显示窗口的标题 _NET_WM_NAME, 置顶模拟键盘输入操作 开发依赖 apt install libX11-dev l…

【前端Vue】社交信息头条项目完整笔记第2篇:二、登录注册,准备【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配,关于 , 配置文件,封装请求模块。十、用户关…

LeetCode-1669题:合并两个链表(原创)

【题目描述】 给你两个链表 list1 和 list2 &#xff0c;它们包含的元素分别为 n 个和 m 个。请你将 list1 中下标从 a 到 b 的全部节点都删除&#xff0c;并将list2 接在被删除节点的位置。下图中蓝色边和节点展示了操作后的结果&#xff1a; 请你返回结果链表的头指针。 【…

10 - Debian如何让特定用户切换root身份

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何让特定用户切换root身份 《傅老师Debian小知识库系列之10》——原创 前言 傅老师Debian小知识库特点&#xff1a; 1、最小化拆解Debian实用技能…

LNMP架构之mysql数据库实战

mysql安装 到官网www.mysql.com下载源码版本 实验室使用5.7.40版本 tar xf mysql-boost-5.7.40.tar.gz #解压 cd mysql-boost-5.7.40/ yum install -y cmake gcc-c bison #安装依赖性 cmake -DCMAKE_INSTALL_PREFIX/usr/local/mysql -DMYSQL_DATADIR/data/mysql -DMYSQL_…