Provides an HBase Thrift service. This package contains a Thrift interface definition file for an HBase RPC service and a Java server implementation. There are currently 2 thrift server implementations in HBase, the packages:

- org.apache.hadoop.hbase.thrift: This may one day be marked as depreceated.
- org.apache.hadoop.hbase.thrift2: i.e. this package. This is intended to closely match to the HTable interface and to one day supercede the older thrift (the old thrift mimics an API HBase no longer has).

## What is Thrift?

"Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml. Originally developed at Facebook, Thrift was open sourced in April 2007 and entered the Apache Incubator in May, 2008". From http://thrift.apache.org/

## Description

The HBase API is defined in the file hbase.thrift. A server-side implementation of the API is in `org.apache.hadoop.hbase.thrift2.ThriftHBaseServiceHandler` with the server boiler plate in `org.apache.hadoop.hbase.thrift2.ThriftServer`. The generated interfaces, types, and RPC utility files are checked into SVN under the `org.apache.hadoop.hbase.thrift2.generated` directory.

To stop, use:

      ./bin/hbase-daemon.sh stop thrift

These are the command line arguments the Thrift server understands in addition to `start` and `stop`:

`-b, --bind`
  Address to bind the Thrift server to. Not supported by the Nonblocking and HsHa server [default: `0.0.0.0`]
`-p, --port`
  Port to bind to [default: `9090`]
`-f, --framed`
  Use framed transport (implied when using one of the non-blocking servers)
`-c, --compact`
  Use the compact protocol [default: binary protocol]
`-h, --help`
  Displays usage information for the Thrift server
`-threadpool`
  Use the TThreadPoolServer. This is the default.
`-hsha`
  Use the THsHaServer. This implies the framed transport.
`-nonblocking`
  Use the TNonblockingServer. This implies the framed transport.

### Details

HBase currently uses version 0.9.0 of Apache Thrift.

The files were generated by running the commands under the hbase checkout dir:

      thrift -strict --gen java:hashcode ./hbase-thrift/src/main/resources/org/apache/hadoop/hbase/thrift2/hbase.thrift
      # Move the generated files into place their expected location under hbase
      mv gen-java/org/apache/hadoop/hbase/thrift2/generated/* hbase-thrift/src/main/java/org/apache/hadoop/hbase/thrift2/generated/
      # Remove the gen-java file made by thrift
      rm -rf gen-java

The 'thrift' binary is the Thrift compiler, and it is distributed separately from HBase in a Thrift release. Additionally, specific language runtime libraries are a part of a Thrift release. A version of the Java runtime is included in HBase via maven.