一、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 | ||
列限定符 | 单元格值 | 列限定符 | 单元格值 | |
4944191 | name | 登卫红 | pay_time | 2020-5-10 |
4944191 | addr | 贵州省铜仁市德江县7单元267室 | current_count | 308.1 |
4944191 | sex | 男 | last_count | 283.1 |
4944191 | usage | 25 | ||
4944191 | total_money | 150 | ||
4944191 | check_date | 2020-4-25 | ||
4944191 | latest_pay_date | 2020-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')