After some testing years ago, I wrote ExecuteBatch bindings for avatica. The observation was that we spent more time executing the HTTP call and parsing the tiny protobuf than we did in sending the update to HBase.
ExecuteBatch was a dirt-simple idea in that instead of sending one row's worth of parameters to bind to a statement, send many row's worth.
e.g. before we would do:
but with executeBatch we can do
and send exactly one http call instead of multiple. Obviously this is a huge saving.