Python API(happybase)操作Hbase案例

一、Windows下安装Python库:happybase

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

二、 开启HBase的Thrift服务

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

# 进入hbase安装目录下的bin目录
cd /usr/local/hbase-2.5.6/bin
#启动Thrift
hbase-daemon.sh start thrift
#jps查看进程
jps

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

 如果启动失败,出现依赖相关错误,可以通过以下命令安装Thrift服务所需要的一系列依赖软件。

yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel

注意: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')

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024/3/31 蜂鸣器(1)

蜂鸣器分为有源蜂鸣器和无源蜂鸣器。有源内部自带振荡源,接上直流电压即可发声。无源则需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲频率可以发出不同频率的声音。(好想用stm32做个电子琴) 驱动方式(由于蜂鸣器所…

基于SpringBoot+Vue人口老龄化社区服务与管理平台(源码+部署说明+演示视频+源码介绍+lw)

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

企微获客助手到底有哪些价值?

获客助手作为企业微信官方提供的获客工具,在私域布局中确实展现了其强大的引流效率和便利性。这一工具通过简化传统引流过程中的复杂步骤,使得企业能够更高效地吸引和转化潜在客户。此外,获客助手还能实现不同渠道的无缝链接,进一…

【研发日记】Matlab/Simulink开箱报告(十一)——Requirements Toolbox

目录 前言 Requirements Toolbox 编写需求 需求联接设计 需求跟踪开发进度 追溯性矩阵 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(六)——S-Fuction模块(TLC)》 见《开箱报告&#x…

Kafka开发实录

前言 最近我总是在做大胆的事情,莫不是少年也需要冲冲冲,明明我不是这样的人啊,难不成这就是命运,来自命运石之门的选择!废话不多说,本次是Kafka的实战篇,为什么这篇这么快呢?看了开…

网络——协议定制

目录 再谈协议 结构化数据 计算器 封装socket 封装TcpServer服务器 协议定制 问题 解决方法 守护进程 setsid 守护进程函数 json库 序列化和反序列化 再谈协议 原来不是说过什么是协议吗,协议不就是通信双方必须遵守的约定吗,那这就完了吗&…

大语言模型---强化学习

本文章参考,原文链接:https://blog.csdn.net/qq_35812205/article/details/133563158 SFT使用交叉熵损失函数,目标是调整参数使模型输出与标准答案一致,不能从整体把控output质量 RLHF(分为奖励模型训练、近端策略优化…

Vue系列——数据对象

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>el:挂载点</title> </head> <body&g…

在国内如何给Chrome浏览器安装Vue Devtools插件

Vue Devtools是一个强大的Chrome浏览器插件&#xff0c;为Vue.js开发者提供了丰富的调试和性能优化功能。然而&#xff0c;在国内由于无法访问Google Chrome Web Store&#xff0c;安装Vue Devtools需要使用其他方法。以下是安装步骤&#xff1a; 步骤一&#xff1a;下载Vue D…

逆向分析之antibot

现在太卷了&#xff0c;没资源&#xff0c;很难接到好活&#xff0c;今天群里看到个单子&#xff0c;分析了下能做&#xff0c;结果忙活了一小会&#xff0c;幸好问了下&#xff0c;人家同时有多个人再做&#xff0c;直接就拒绝再继续了。就这次忘了收定金了&#xff0c;所以原…

输出1到10的阶乘--C语言

#include<stdio.h> int fac(int n){if(n<1){return 1;}elsereturn fac(n-1)*n; } int main(){int i, result;for(i1;i<10;i){resultfac(i);printf("%d!%d\n",i,result);}} 输出结果&#xff1a;

AI跟踪报道第35期-新加坡内哥谈技术-本周AI新闻:终于打败ChatGPT的机器人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

二维码门楼牌管理应用平台:创新管理与服务的全新方式

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、切换功能在城市管理中的应用四、二维码门楼牌管理应用平台的未来展望 前言 在数字化时代的浪潮中&#xff0c;二维码技术以其便捷、高效的特点&#xff0c;正逐渐渗透到我们生…

C语言每日一题

1.题目 二.分析 本题有两点需要注意的&#xff1a; do-while循环 &#xff1a;在判断while条件前先执行一次do循环static变量 &#xff1a;程序再次调用时static变量的值不会重新初始化&#xff0c;而是在上一次退出时的基础上继续执行。for( i 1; i < 3; i )将调用两次…

容器四(Map 接口)

目录 HashMap 和 HashTable Map 接口中的常用方法 HashMap 底层实现 Hashmap 基本结构 存储数据过程 put(key,value) 取数据过程 get(key) 扩容问题 JDK8 将链表在大于 8 情况下变为红黑二叉树 Map 就是用来存储“键(key)&#xff0d;值(value) 对”的。 Map 类中存储的…

Vue.js前端开发零基础教学(四)

学习目标&#xff1a; 熟悉选项式API和组合式API&#xff0c;能够说出选项式API和组合式API的区别 掌握注册组件的方法&#xff0c;能够运用全局注册或者局部注册的方式完成组件的注册 掌握父组件向子组件传递数据的方法&#xff0c;能够使用props实现数据传递等等 前言 在学习…

【Leetcode每日一题】 递归 - 求根节点到叶节点数字之和(难度⭐⭐)(47)

1. 题目解析 题目链接&#xff1a;129. 求根节点到叶节点数字之和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 递归函数设计&#xff1a; 我们设计了一个递归函数 int dfs(TreeNode* root, int num)&#xff0c;其…

【42 可视化大屏 | 某瓣电影Top250数据分析可视化大屏】

文章目录 &#x1f3f3;️‍&#x1f308; 1 普版大屏&#x1f3f3;️‍&#x1f308;2 Flask版大屏&#x1f3f3;️‍&#x1f308;3 FlaskMysql版大屏&#x1f3f3;️‍&#x1f308; 4. 可视化项目源码数据 大家好&#xff0c;我是 &#x1f449;【Python当打之年(点击跳转)…

PonyAi Planning-横纵向轨迹规划

PonyAi Planning-横纵向轨迹规划 轨迹规划的探索和挑战 轨迹规划的概念安全舒适两不误&#xff1a;探讨优化算法在规划控制中的应用 轨迹规划的概念 决策 横向规划 纵向规划 优化算法在规划&#xff08;Planning&#xff09;中的应用 附赠自动驾驶学习资料和量产经验…

七、函数的使用方法

函数的调用 nameinput&#xff08;&#xff09;#输入参数并赋值name print&#xff08;name&#xff09;#d打印name 格式&#xff1a;返回值函数名&#xff08;参数&#xff09; def get_sum(n):#形式参数计算累加和:param n::return: sumsum0for i in range(1,n1):sumiprint…