hadoophbasepython-3.7happybase

Can't use 'put'() to add data to hbase with happybase


My python version is 3.7, and after I ran pip3 install happybase, I started the command hbase thrift start and tried to write a brief .py file as following:

import happybase
connection = happybase.Connection('master')
table = connection.table('jmlr')   #'jmlr' is a table in hbase
for i in table.scan():
        print(i)
table.put('001', {'title':'dasds'})   #error here
connection.close()

When it's about to run table.put(), it reported such an error:

thriftpy2.transport.base.TTransportException: TTransportException(type=4, message='TSocket read 0 bytes')

And at the same time, the thrift reported an error:

ERROR [thrift-worker-1] thrift.TBoundedThreadPoolServer: Error occurred during processing of message. java.lang.IllegalArgumentException: Invalid famAndQf provided.

But just now I ran this python file again, it gave me a different error in thrift:

thrift.TBoundedThreadPoolServer: Thrift error occurred during processing of message. org.apache.thrift.protocol.TProtocolException: Bad version in readMessageBegin

I have tried to add parameters like protocol='compact', transport='framed', but this didn't work, even the table.scan() failed. Everything in the hbase shell is OK, so I can't figure out what went wrong, I'm about to collapse.


Solution

  • I ran into the same issue and found this sollution. You need to add even empty Column Qualifier ( ':' symbol as delimiter between Column Family and Column Qualifier) into put() method:

    table.put('001:', {'title':'dasds'}) 
    

    Also, you have a different error message after second run of script because thrift server is already failed.

    I hope it will help you.