当前位置: 代码网 > it编程>前端脚本>Python > Python API(happybase)操作Hbase案例

Python API(happybase)操作Hbase案例

2024年08月06日 Python 我要评论
想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如下命令,开启HBase的Thrfit服务。链接:https://pan.baidu.com/s/14n-2XoXyxZL7hN80cNTJMw。至此启动Thrift服务并安装了HappyBase库后,即可用python代码连接HBase了。某某自来水公司,需要存储大量的缴费明细数据。HBase Thrift的端口默认在9090。贵州省铜仁市德江县7单元267室。行键(RowKey)

一、任务需求分析及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')
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com