hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sleiman Jneidi <jneidi.slei...@gmail.com>
Subject Re: Re: managing HConnection
Date Fri, 13 Feb 2015 11:49:09 GMT
a single HConnection

On Fri, Feb 13, 2015 at 11:12 AM, Serega Sheypak <serega.sheypak@gmail.com>
wrote:

> What are you trying to achieve?
>
> 2015-02-13 12:36 GMT+03:00 Sleiman Jneidi <jneidi.sleiman@gmail.com>:
>
> > To be honest guys I am still confused, especially that that HConnection
> > implements Closeable  and hence everyone has the right to close the
> > connection. I wrote this code to manage connections but I am not sure
> about
> > its correctness.
> >
> >
> > private static class HConnectionProvider {
> >
> >   private static HConnection hConnection;
> >
> >  private static final Lock LOCK = new ReentrantLock();
> >
> >   static {
> >
> >  hConnection = createNewConnection();
> >
> >    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
> >
> >     @Override
> >
> >   public void run() {
> >
> >   if(hConnection!=null && !hConnection.isClosed()){
> >
> >    try {
> >
> >    hConnection.close();
> >
> >    } catch (IOException e) {
> >
> >    e.printStackTrace();
> >
> >    }
> >
> >   }
> >
> >   }
> >
> >  }));
> >
> >  }
> >
> >   public static HConnection connection(){
> >
> >  if(!hConnection.isClosed()){
> >
> >   return hConnection;
> >
> >  }
> >
> >  boolean acquired = false;
> >
> >  try{
> >
> >   acquired = LOCK.tryLock(5,TimeUnit.SECONDS);
> >
> >   if(hConnection.isClosed()){
> >
> >   hConnection = createNewConnection();
> >
> >   }
> >
> >   return hConnection;
> >
> >     } catch (InterruptedException e) {
> >
> >   throw new RuntimeException(e);
> >
> >  }finally{
> >
> >   if(acquired){
> >
> >   LOCK.unlock();
> >
> >   }
> >
> >  }
> >
> >    }
> >
> >   private static HConnection createNewConnection(){
> >
> >  try {
> >
> >   HConnection connection = HConnectionManager.createConnection(config);
> >
> >   return connection;
> >
> >  } catch (IOException e) {
> >
> >   throw new RuntimeException(e);
> >
> >  }
> >
> >  }
> >
> >   }
> >
> > On Fri, Feb 13, 2015 at 8:57 AM, Serega Sheypak <
> serega.sheypak@gmail.com>
> > wrote:
> >
> > > Hi, really, I can share one Hconnection for the whole application.
> > > It's done by design. I have several servlets. Each servlet has 1-2
> > > controllers working with hbase internally (put/get/e.t.c)
> > > Right now I don't see any reason to refactor code and share single
> > > HConnection for all controllers in servlets.
> > >
> > >
> > > 2015-02-13 6:56 GMT+03:00 David chen <c77_cn@163.com>:
> > >
> > > > Hi Serega,
> > > > I am very interesting in the reason why per application need to
> create
> > 5
> > > > instead of only one HConnection instances during servlet
> > initialization?
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > At 2015-02-04 01:01:38, "Serega Sheypak" <serega.sheypak@gmail.com>
> > > wrote:
> > > > >Hi, guys from group helped me a lot. I did solve pretty the same
> > problem
> > > > >(CRUD web-app)
> > > > >
> > > > >1. Use single instance of HConnection per application.
> > > > >2. Instantiate it once.
> > > > >3. create HTable instance for each CRUD operation and safely close
> it
> > > > >(try-catch-finally). Use the same HConnection to create any HTable
> for
> > > > CRUD
> > > > >operation.
> > > > >4. DO NOT close HConnection after CRUD operation
> > > > >
> > > > >I have logic controllers which get HConnection injection in
> > > > >HttpServlet.init method.
> > > > >So I have 5 HConnection instances per application created during
> > servlet
> > > > >initialization
> > > > >
> > > > >
> > > > >2015-02-03 18:12 GMT+03:00 Ted Yu <yuzhihong@gmail.com>:
> > > > >
> > > > >> Please see '61.1. Cluster Connections' under
> > > > >> http://hbase.apache.org/book.html#architecture.client
> > > > >>
> > > > >> Cheers
> > > > >>
> > > > >> On Tue, Feb 3, 2015 at 6:47 AM, sleimanjneidi <
> > > jneidi.sleiman@gmail.com
> > > > >
> > > > >> wrote:
> > > > >>
> > > > >> > Hi all,
> > > > >> > I am using hbase-0.98.1-cdh5.1.4 client and I am a bit confused
> by
> > > the
> > > > >> > documentation of HConnection. The document says the following:
> > > > >> >
> > > > >> > HConnection instances can be shared. Sharing is usually
what you
> > > want
> > > > >> > because rather than each HConnection instance having to
do its
> own
> > > > >> > discovery of regions out on the cluster, instead, all clients
> get
> > to
> > > > >> share
> > > > >> > the one cache of locations. HConnectionManager does the
sharing
> > for
> > > > you
> > > > >> if
> > > > >> > you go by it getting connections. Sharing makes cleanup
of
> > > > HConnections
> > > > >> > awkward. .
> > > > >> >
> > > > >> > So now I have a simple question: Can I share the same
> HConnection
> > > > >> instance
> > > > >> > in my entire application?
> > > > >> > And write some magic code to know when to close or never
close
> at
> > > all?
> > > > >> > Or I have to create an instance and close it every time
I do a
> > CRUD
> > > > >> > operation ?
> > > > >> >
> > > > >> > Many thanks
> > > > >> >
> > > > >> >
> > > > >> >
> > > > >>
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message