HBase是基于Hadoop的分布式列式数据库,适合存储海量结构化数据,Python作为常用的开发语言,可以通过Thrift接口实现对HBase的操作。下面介绍具体的实现步骤和常用操作示例。
前置准备
在使用Python操作HBase之前,需要先完成以下环境配置:
- 部署好可用的HBase集群,并且开启Thrift服务,默认Thrift服务端口为9090
- 安装Python环境,建议使用Python3.6及以上版本
- 安装happybase库,这是Python中常用的HBase操作客户端库,基于Thrift协议实现
安装依赖库
可以通过pip命令直接安装happybase库,执行以下命令:
pip install happybase
建立HBase连接
首先需要创建与HBase Thrift服务的连接,示例代码如下:
import happybase # 建立连接,host为HBase Thrift服务所在的主机地址,port为Thrift服务端口 connection = happybase.Connection(host='127.0.0.1', port=9090) # 打开连接 connection.open() # 操作完成后关闭连接 connection.close()
常用操作示例
创建表
HBase的表需要指定列族,创建表的代码如下:
import happybase
connection = happybase.Connection(host='127.0.0.1', port=9090)
connection.open()
# 定义列族,这里创建两个列族cf1和cf2
families = {
'cf1': dict(max_versions=3),
'cf2': dict(max_versions=1)
}
# 创建表,表名为test_table
connection.create_table('test_table', families)
print('表创建成功')
connection.close()
插入数据
向表中插入数据需要指定行键、列族和列名、对应的值,示例代码如下:
import happybase
connection = happybase.Connection(host='127.0.0.1', port=9090)
connection.open()
# 获取表对象
table = connection.table('test_table')
# 插入数据,行键为row1,cf1:name列的值为张三,cf2:age列的值为20
table.put('row1', {'cf1:name': '张三', 'cf2:age': '20'})
print('数据插入成功')
connection.close()
查询数据
查询数据支持单行查询和扫描全表查询,示例代码如下:
import happybase
connection = happybase.Connection(host='127.0.0.1', port=9090)
connection.open()
table = connection.table('test_table')
# 单行查询,查询行键为row1的数据
row = table.row('row1')
print('单行查询结果:', row)
# 扫描全表数据,limit参数限制返回的行数
for key, data in table.scan(limit=10):
print(f'行键:{key}, 数据:{data}')
connection.close()
删除数据
可以删除指定行或者指定列的数据,示例代码如下:
import happybase
connection = happybase.Connection(host='127.0.0.1', port=9090)
connection.open()
table = connection.table('test_table')
# 删除整行数据,行键为row1
table.delete('row1')
# 删除指定列的数据,删除row1行的cf1:name列
table.delete('row1', columns=['cf1:name'])
print('数据删除成功')
connection.close()
注意事项
- 操作完成后一定要及时关闭连接,避免占用Thrift服务资源
- HBase中的值都是以字节形式存储,Python中传入字符串时会自动编码,读取时返回的是字节类型,需要手动解码
- 如果HBase集群开启了认证,需要在连接时配置对应的认证参数
- 列族和列名的定义要符合HBase的命名规范,避免使用特殊字符