Use the Apache Thrift Proxy API
The Apache Thrift library provides cross-language client-server remote procedure calls (RPCs), using Thrift bindings.
A Thrift binding is client code generated by the Apache Thrift Compiler for a target language (such as Python) that allows communication between the Thrift server and clients using that client code. HBase includes an Apache Thrift Proxy API, which allows you to write HBase applications in Python, C, C++, or another language that Thrift supports. The Thrift Proxy API is slower than the Java API and may have fewer features. T use the Thrift Proxy API, you need to configure and run the HBase Thrift server on your cluster. You also need to install the Apache Thrift compiler on your development system.
HBase.thrift
is included as part of HBase. After
generating the bindings, copy the Thrift libraries for your language
into the same directory as the generated bindings. In the following
Python example, these libraries provide the
thrift.transport
and thrift.protocol
libraries. These commands show how you might generate the Thrift
bindings for Python and copy the libraries on a Linux system.mkdir HBaseThrift
cd HBaseThrift/
thrift -gen py /path/to/Hbase.thrift
mv gen-py/* .
rm -rf gen-py/
mkdir thrift
cp -rp ~/Downloads/thrift-0.9.0/lib/py/src/* ./thrift/
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
from thrift.transport import TTransport
from hbase import Hbase
# Connect to HBase Thrift server
transport = TTransport.TBufferedTransport(TSocket.TSocket(host, port))
protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport)
# Create and open the client connection
client = Hbase.Client(protocol)
transport.open()
# Modify a single row
mutations = [Hbase.Mutation(
column='columnfamily:columndescriptor', value='columnvalue')]
client.mutateRow('tablename', 'rowkey', mutations)
# Modify a batch of rows
# Create a list of mutations per work of Shakespeare
mutationsbatch = []
for line in myDataFile:
rowkey = username + "-" + filename + "-" + str(linenumber).zfill(6)
mutations = [
Hbase.Mutation(column=messagecolumncf, value=line.strip()),
Hbase.Mutation(column=linenumbercolumncf, value=encode(linenumber)),
Hbase.Mutation(column=usernamecolumncf, value=username)
]
mutationsbatch.append(Hbase.BatchMutation(row=rowkey,mutations=mutations))
# Run the mutations for all the lines in myDataFile
client.mutateRows(tablename, mutationsbatch)
transport.close()
The Thrift Proxy API does not support writing to HBase clusters that are secured using Kerberos.