通过python访问hbase
1.创建表操作
目的:创建teacher的表
代码:
#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *
# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()
content1 = ColumnDescriptor(name='teacher_info')
content2 = ColumnDescriptor(name='teacher_hobby')
client.createTable('teacher',[content1,content2])
client.getTableNames()
报错:
TypeError: a bytes-like object is required, not 'str'
解释:这个错误提示是由于 Thrift 期望的是一个字节对象(bytes-like object),而不是字符串对象(str)。在这种情况下,需要将字符串编码为字节对象。
解决方案:
#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *
# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()
# 定义列族
content1 = ColumnDescriptor(name=b'teacher_info')
content2 = ColumnDescriptor(name=b'teacher_hobby')
client.createTable(b'teacher',[content1,content2])
client.getTableNames()
2.查看表结构
print(client.getColumnDescriptors(b'teacher'))
3.删除表
需要先禁用表,再删除
client.disableTable(b'demo') client.deleteTable(b'demo')
4.添加数据
在使用 Thrift API 与 HBase 交互时,必须使用
Mutation
类型来指定要插入或更新的数据。这是因为Mutation
是一个特定的结构,包含了所需的列和对应的值,Thrift API 依赖这个结构来处理数据操作。一个
Mutation
对象包含以下字段:
column
:列名,包括列族和列限定符,例如"family:qualifier"
。value
:要插入或更新的值。isDelete
:一个布尔值,表示是否删除该列的数据,默认为False
。
#引入与Thrift建立连接时字节传输协议的包
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
# 引入访问habse接口的包
from hbase.Hbase import *
from hbase.ttypes import *
# 建立连接
transport = TSocket.TSocket('127.0.0.1',9090)
# TBinaryProtocol 是一种数据封装方式
protocol = TBinaryProtocol.TBinaryProtocol(transport)
# 客户端实例
client = Client(protocol)
# 建立连接
transport.open()
print(client.getTableNames())
mutations = [Mutation(column=b"teacher_info:name", value=b"Bob"),Mutation(column=b"teacher_info:sex", value=b"male")]
client.mutateRow(b'teacher',b'20201110', mutations,{})
print(client.getRow(b'teacher', b'20201110',{}))
# 关闭连接
transport.close()
5.查看数据
print(client.getRow(b'teacher', b'20201110',{}))
6.删除数据
有两种方式,第一种是根据行键,第二种是根据时间戳
client.deleteAllRow(b'teacher',b'20201110',{}) client.deleteAllRowTs(b'teacher',b'20201110',1717297976802,{})