hadoop - what difference of managed and unmanaged hconnection in hbase? -
when tried create htable instance in way.
configuration conf = hbaseconfiguration.create(); hconnection conn = hconnectionmanager.getconnection(conf); conn.gettable("table_name");
then got exception.
@override public htableinterface gettable(tablename tablename, executorservice pool) throws ioexception { if (managed) { throw new ioexception("the connection has unmanaged."); } return new htable(tablename, this, pool); }
so , wants know concrete reflection of managed , 'unmanaged' hconnection?
before call hconnectionmanager.getconnection
have create connection using hconnectionmanager.createconnection
passing earlier created hbaseconfiguration
instance. hconnectionmanager.getconnection
return connection exists. bit of hconnectionmanager
javadoc how handle connection pool:
this class has static map of hconnection instances keyed by configuration; invocations of getconnection(configuration) that pass sameconfiguration instance returned samehconnection instance
in case, can create connection using hconnectionmanager.createconnection
, use returned connection open htable
edit:
@ifiddddddbest, found javadocs hconnectionimplementation
has description of managed flag(may understand):
@param managed if true, not full shutdown on close; i.e. cleanup of connection zk , shutdown of services; close down resources connection responsible , decrement usage counters. caller full cleanup. set when want have connection sharing going on -- reuse of zk connection, , cached region locations, established regionserver connections, etc. when connections shared, have reference counting going on , full cleanup when no more users of hconnectionimplementation instance.
in newer versions of hbase(>1.0), managed flag disappeared , connection management on client side,e.g. client responsible close , if this, close internal connections zk,to hbase master, etc, not decrease reference counter.
Comments
Post a Comment