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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。