org.apache.hadoop.hbase.client
Class HConnectionManager

java.lang.Object
  extended by org.apache.hadoop.hbase.client.HConnectionManager

@InterfaceAudience.Public
@InterfaceStability.Evolving
public class HConnectionManager
extends Object

A non-instantiable class that manages creation of HConnections.

The simplest way to use this class is by using createConnection(Configuration). This creates a new HConnection to the cluster that is managed by the caller. From this HConnection HTableInterface implementations are retrieved with HConnection.getTable(byte[]). Example:

 HConnection connection = HConnectionManager.createConnection(config);
 HTableInterface table = connection.getTable("table1");
 try {
   // Use the table as needed, for a single operation and a single thread
 } finally {
   table.close();
   connection.close();
 }
 

This class has a static Map of HConnection instances keyed by HConnectionKey; A HConnectionKey is identified by a set of Configuration properties. Invocations of getConnection(Configuration) that pass the same Configuration instance will return the same HConnection instance ONLY WHEN the set of properties are the same (i.e. if you change properties in your Configuration instance, such as RPC timeout, the codec used, HBase will create a new HConnection instance. For more details on how this is done see HConnectionKey).

Sharing HConnection instances is usually what you want; all clients of the HConnection instances share the HConnections' cache of Region locations rather than each having to discover for itself the location of meta, etc. But sharing connections makes clean up of HConnection instances a little awkward. Currently, clients cleanup by calling deleteConnection(Configuration). This will shutdown the zookeeper connection the HConnection was using and clean up all HConnection resources as well as stopping proxies to servers out on the cluster. Not running the cleanup will not end the world; it'll just stall the closeup some and spew some zookeeper connection failed messages into the log. Running the cleanup on a HConnection that is subsequently used by another will cause breakage so be careful running cleanup.

To create a HConnection that is not shared by others, you can set property "hbase.client.instance.id" to a unique value for your Configuration instance, like the following:

 conf.set("hbase.client.instance.id", "12345");
 HConnection connection = HConnectionManager.getConnection(conf);
 // Use the connection to your hearts' delight and then when done...
 conf.set("hbase.client.instance.id", "12345");
 HConnectionManager.deleteConnection(conf, true);
 
 

Cleanup used to be done inside in a shutdown hook. On startup we'd register a shutdown hook that called deleteAllConnections() on its way out but the order in which shutdown hooks run is not defined so were problematic for clients of HConnection that wanted to register their own shutdown hooks so we removed ours though this shifts the onus for cleanup to the client.


Nested Class Summary
static class HConnectionManager.HConnectionImplementation
          Encapsulates connection to zookeeper and regionservers.
 
Field Summary
static int MAX_CACHED_CONNECTION_INSTANCES
           
static String RETRIES_BY_SERVER_KEY
           
 
Method Summary
static HConnection createConnection(org.apache.hadoop.conf.Configuration conf)
          Create a new HConnection instance using the passed conf instance.
static HConnection createConnection(org.apache.hadoop.conf.Configuration conf, ExecutorService pool)
          Create a new HConnection instance using the passed conf instance.
static HConnection createConnection(org.apache.hadoop.conf.Configuration conf, ExecutorService pool, User user)
          Create a new HConnection instance using the passed conf instance.
static HConnection createConnection(org.apache.hadoop.conf.Configuration conf, User user)
          Create a new HConnection instance using the passed conf instance.
static void deleteAllConnections()
          Deprecated. kept for backward compatibility, but the behavior is broken. HBASE-8983
static void deleteAllConnections(boolean staleConnection)
          Deprecated.  
static void deleteConnection(org.apache.hadoop.conf.Configuration conf)
          Deprecated.  
static void deleteStaleConnection(HConnection connection)
          Deprecated.  
static
<T> T
execute(HConnectable<T> connectable)
          This convenience method invokes the given HConnectable.connect(org.apache.hadoop.hbase.client.HConnection) implementation using a HConnection instance that lasts just for the duration of the invocation.
static Throwable findException(Object exception)
          Look for an exception we know in the remote exception: - hadoop.ipc wrapped exceptions - nested exceptions Looks for: RegionMovedException / RegionOpeningException / RegionTooBusyException
static HConnection getConnection(org.apache.hadoop.conf.Configuration conf)
          Deprecated. 
static NonceGenerator injectNonceGeneratorForTesting(HConnection conn, NonceGenerator cnm)
           
static void setServerSideHConnectionRetries(org.apache.hadoop.conf.Configuration c, String sn, org.apache.commons.logging.Log log)
          Set the number of retries to use serverside when trying to communicate with another server over HConnection.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

RETRIES_BY_SERVER_KEY

public static final String RETRIES_BY_SERVER_KEY
See Also:
Constant Field Values

MAX_CACHED_CONNECTION_INSTANCES

public static final int MAX_CACHED_CONNECTION_INSTANCES
Method Detail

injectNonceGeneratorForTesting

public static NonceGenerator injectNonceGeneratorForTesting(HConnection conn,
                                                            NonceGenerator cnm)
Parameters:
conn - The connection for which to replace the generator.
cnm - Replaces the nonce generator used, for testing.
Returns:
old nonce generator.

getConnection

@Deprecated
public static HConnection getConnection(org.apache.hadoop.conf.Configuration conf)
                                 throws IOException
Deprecated. 

Get the connection that goes with the passed conf configuration instance. If no current connection exists, method creates a new connection and keys it using connection-specific properties from the passed Configuration; see HConnectionKey.

Parameters:
conf - configuration
Returns:
HConnection object for conf
Throws:
ZooKeeperConnectionException
IOException

createConnection

public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf)
                                    throws IOException
Create a new HConnection instance using the passed conf instance.

Note: This bypasses the usual HConnection life cycle management done by getConnection(Configuration). The caller is responsible for calling Closeable.close() on the returned connection instance. This is the recommended way to create HConnections. HConnection connection = HConnectionManager.createConnection(conf); HTableInterface table = connection.getTable("mytable"); table.get(...); ... table.close(); connection.close();

Parameters:
conf - configuration
Returns:
HConnection object for conf
Throws:
ZooKeeperConnectionException
IOException

createConnection

public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf,
                                           ExecutorService pool)
                                    throws IOException
Create a new HConnection instance using the passed conf instance.

Note: This bypasses the usual HConnection life cycle management done by getConnection(Configuration). The caller is responsible for calling Closeable.close() on the returned connection instance. This is the recommended way to create HConnections. ExecutorService pool = ...; HConnection connection = HConnectionManager.createConnection(conf, pool); HTableInterface table = connection.getTable("mytable"); table.get(...); ... table.close(); connection.close();

Parameters:
conf - configuration
pool - the thread pool to use for batch operation in HTables used via this HConnection
Returns:
HConnection object for conf
Throws:
ZooKeeperConnectionException
IOException

createConnection

public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf,
                                           User user)
                                    throws IOException
Create a new HConnection instance using the passed conf instance.

Note: This bypasses the usual HConnection life cycle management done by getConnection(Configuration). The caller is responsible for calling Closeable.close() on the returned connection instance. This is the recommended way to create HConnections. ExecutorService pool = ...; HConnection connection = HConnectionManager.createConnection(conf, pool); HTableInterface table = connection.getTable("mytable"); table.get(...); ... table.close(); connection.close();

Parameters:
conf - configuration
user - the user the connection is for
Returns:
HConnection object for conf
Throws:
ZooKeeperConnectionException
IOException

createConnection

public static HConnection createConnection(org.apache.hadoop.conf.Configuration conf,
                                           ExecutorService pool,
                                           User user)
                                    throws IOException
Create a new HConnection instance using the passed conf instance.

Note: This bypasses the usual HConnection life cycle management done by getConnection(Configuration). The caller is responsible for calling Closeable.close() on the returned connection instance. This is the recommended way to create HConnections. ExecutorService pool = ...; HConnection connection = HConnectionManager.createConnection(conf, pool); HTableInterface table = connection.getTable("mytable"); table.get(...); ... table.close(); connection.close();

Parameters:
conf - configuration
pool - the thread pool to use for batch operation in HTables used via this HConnection
user - the user the connection is for
Returns:
HConnection object for conf
Throws:
ZooKeeperConnectionException
IOException

deleteConnection

public static void deleteConnection(org.apache.hadoop.conf.Configuration conf)
Deprecated. 

Delete connection information for the instance specified by passed configuration. If there are no more references to the designated connection connection, this method will then close connection to the zookeeper ensemble and let go of all associated resources.

Parameters:
conf - configuration whose identity is used to find HConnection instance.

deleteStaleConnection

public static void deleteStaleConnection(HConnection connection)
Deprecated. 

Cleanup a known stale connection. This will then close connection to the zookeeper ensemble and let go of all resources.

Parameters:
connection -

deleteAllConnections

public static void deleteAllConnections(boolean staleConnection)
Deprecated. 

Delete information for all connections. Close or not the connection, depending on the staleConnection boolean and the ref count. By default, you should use it with staleConnection to true.


deleteAllConnections

@Deprecated
public static void deleteAllConnections()
Deprecated. kept for backward compatibility, but the behavior is broken. HBASE-8983

Delete information for all connections..


execute

@InterfaceAudience.Private
public static <T> T execute(HConnectable<T> connectable)
                 throws IOException
This convenience method invokes the given HConnectable.connect(org.apache.hadoop.hbase.client.HConnection) implementation using a HConnection instance that lasts just for the duration of the invocation.

Type Parameters:
T - the return type of the connect method
Parameters:
connectable - the HConnectable instance
Returns:
the value returned by the connect method
Throws:
IOException

findException

public static Throwable findException(Object exception)
Look for an exception we know in the remote exception: - hadoop.ipc wrapped exceptions - nested exceptions Looks for: RegionMovedException / RegionOpeningException / RegionTooBusyException

Returns:
null if we didn't find the exception, the exception otherwise.

setServerSideHConnectionRetries

public static void setServerSideHConnectionRetries(org.apache.hadoop.conf.Configuration c,
                                                   String sn,
                                                   org.apache.commons.logging.Log log)
Set the number of retries to use serverside when trying to communicate with another server over HConnection. Used updating catalog tables, etc. Call this method before we create any Connections.

Parameters:
c - The Configuration instance to set the retries into.
log - Used to log what we set in here.


Copyright © 2015 The Apache Software Foundation. All Rights Reserved.