python3.7通过thrift操作hbase的示例代码
HBase是一个分布式的、面向列的开源数据库,其是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。其数据结构类似与Redis的key-value模式。
python3.7通过thrift,rpc接口操作hbase,指定依赖库为:thrift和hbase-thrift。然而我们在python3.7环境中发现hbase-thrift-0.20.4无法被支持,hbase-thrift官方仅推荐用于python2.x。于是有了下边的patch版本和patch版本写法的客户端。
patch版本下载,适用于python3.x:http://dl.cpp.la/Archive/hbase-thrift-0.20.4.patch.tgz
卸载hbase-thrift-0.20.4版本
#pip3list|grephbase-thrift >>hbase-thrift0.20.4 #pip3uninstallhbase-thrift-y >>Successfullyuninstalledhbase-thrift-0.20.4
安装hbase-thrift-0.20.4.patch版本(支持python3.x)
wgethttp://dl.cpp.la/Archive/hbase-thrift-0.20.4.patch.tgz tar-zxvfhbase-thrift-0.20.4.patch.tgz cdhbase-thrift-0.20.4.patch python3setup.pyinstall
检测安装是否成功
#pip3list|grephbase-thrift
>>hbase-thrift0.20.4.patch
Python3.7操作hbase-thrift-patch客户端代码示例
fromthrift.transportimportTSocket
fromthrift.transport.TTransportimportTBufferedTransport
fromthrift.protocolimportTBinaryProtocol
fromhbaseimportHbase
fromhbase.ttypesimportColumnDescriptor
fromhbase.ttypesimportMutation
classHBaseClient(object):
def__init__(self):
self.__ip=HBASE_URI.get("HOST")
self.__port=HBASE_URI.get("PORT")
self.__transport=self.createSocket
protocol=TBinaryProtocol.TBinaryProtocol(self.__transport)
self.__client=Hbase.Client(protocol)
self.__transport.open()
@property
defcreateSocket(self):
CS=TSocket.TSocket(self.__ip,self.__port)
CS.setTimeout(60*1000)
returnTBufferedTransport(CS)
def__del__(self):
self.__transport.close()
defget_tables(self):
"""
getalltablename
:return:tablenamelist
"""
returnself.__client.getTableNames()
defcreate_table(self,table,*columns):
"""
createtable
:paramtable:tablename
:paramcolumns:columnsname,variableparameter
"""
func=lambdacol:ColumnDescriptor(col)
column_families=list(map(func,columns))
self.__client.createTable(table,column_families)
defdelete_table(self,table):
'''
deletetableinhbase
:paramtable:tableName
:return:
'''
ifself.__client.isTableEnabled(table):
self.__client.disableTable(table)
self.__client.deleteTable(table)
defput(self,table,row,columns):
"""
addrecord
:paramtable:tablename
:paramrow:
:paramcolumns:
:return:
"""
self.__client.mutateRow(table,row,[Mutation(column=k,value=v)fork,vincolumns.items()])
defdelete(self,table,row,column):
"""
deleterecord
:paramtable:tablename
:paramrow:
"""
self.__client.deleteAll(table,row,column)
defscan(self,table,start_row="",columns=None):
"""
getrecord
:paramtable:tablename
:paramstart_row:
:paramcolumns:
"""
scanner=self.__client.scannerOpen(table,start_row,columns)
whileTrue:
r=self.__client.scannerGet(scanner)
ifnotr:
break
yielddict([(k,v.value)fork,vinr[0].columns.items()])
if__name__=="__main__":
client=HBaseClient()
forvinclient.scan('studentd',columns={"cpp.la":"https://cpp.la"}):
print(v)
by:cpp.la
ps:python3.7连接hbase
pip安装thrift和hbase包
fromthrift.transportimportTSocket,TTransport
fromthrift.protocolimportTBinaryProtocol,TCompactProtocol
fromhbaseimportHbase
socket=TSocket.TSocket('10.1.21.35',port=9090)
socket.setTimeout(5000)
transport=TTransport.TFramedTransport(socket)
protocol=TBinaryProtocol.TBinaryProtocol(transport)//不使用这个协议
protocol=TCompactProtocol.TCompactProtocol(transport)
client=Hbase.Client(protocol)
socket.open()
table=client.getTableNames()
print(table)
总结
以上所述是小编给大家介绍的python3.7通过thrift操作hbase的示例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。