Hi Lars,

Thank you very much.

With this fixed, I see the CPU at the regionserver become the bottleneck
now. Today I will try 0.94 -- it has some optimizations at the regionserver
for seeks -- to see if I can improve my benchmark numbers further.

Regards,
Yousuf


On Tue, Oct 30, 2012 at 1:14 AM, lars hofhansl <lhofha...@yahoo.com> wrote:

> Whoa... Why indeed? Maybe there was a historic reason.
> I filed HBASE-7069 to fix it.
> -- Lars
>
>   ------------------------------
> *From:* Yousuf Ahmad <myahm...@gmail.com>
> *To:* user@hbase.apache.org
> *Cc:* Ivan Brondino <ibrond...@fi.upm.es>; Ricardo Vilaça <
> rmvil...@di.uminho.pt>; lars hofhansl <lhofha...@yahoo.com>
> *Sent:* Monday, October 29, 2012 6:07 PM
>
> *Subject:* Re: High IPC Latency
>
> Hi guys,
>
> I have an update. Actually a question.
>
>   @Override
>   public synchronized Object[] batch(final List<Row> actions) throws
> InterruptedException, IOException {
>     Object[] results = new Object[actions.size()];
>     connection.processBatch(actions, tableName, pool, results);
>     return results;
>   }
>
> This synchronized method in HTable seems to be causing contention among
> concurrent multigets.
>
> I suppose my question is: why must we have this method synchronized?
>
> Thanks,
> Yousuf
>
>
> On Fri, Oct 19, 2012 at 2:21 PM, Yousuf Ahmad <myahm...@gmail.com> wrote:
>
> No coprocessors :-)
> On Oct 19, 2012 1:21 PM, "Pamecha, Abhishek" <apame...@x.com> wrote:
>
> Also, I hope no coprocessors are in play.
>
> Thanks,
> Abhishek
>
>
> -----Original Message-----
> From: Yousuf Ahmad [mailto:myahm...@gmail.com]
> Sent: Friday, October 19, 2012 10:12 AM
> To: user@hbase.apache.org
> Cc: Ivan Brondino; Ricardo Vilaça
> Subject: Re: High IPC Latency
>
> Hi Lars,
>
> We are following your suggestion and testing against a single region
> server. We just ran a test against a remote region server and soon we will
> test against a local one as well. We will get back to you soon with the
> results.
>
> It will take us a couple of days to port to and test our code with 0.94.2.
> Once we have it working, we will run some experiments and update this
> thread.
>
> Unfortunately, the nature of our project is such that we cannot easily
> translate the benchmark's workload into a program executing the equivalent
> HBase operations directly. For this reason, I attempted to roughly
> translate the workload in terms of HBase operations in my first email and I
> attached a portion of the logs to be a bit more concrete.
>
> Your assistance is very much appreciated! Thank you! We'll keep you
> updated.
>
> Best regards,
> Yousuf
>
>
> On Fri, Oct 19, 2012 at 1:25 AM, lars hofhansl <lhofha...@yahoo.com>
> wrote:
>
> > Can you reproduce this against a single, local region server?
> > Any chance that you can try with the just released 0.94.2?
> >
> >
> > I would love to debug this. If would be a tremendous help if you had a
> > little test program that reproduces this against a single server, so
> > that I can see what is going on.
> >
> > Thanks.
> >
> > -- Lars
> >
> >
> >
> > ----- Original Message -----
> > From: Yousuf Ahmad <myahm...@gmail.com>
> > To: user@hbase.apache.org; lars hofhansl <lhofha...@yahoo.com>
> > Cc: Ivan Brondino <ibrond...@fi.upm.es>; Ricardo Vilaça <
> > rmvil...@di.uminho.pt>
> > Sent: Thursday, October 18, 2012 12:59 PM
> > Subject: Re: High IPC Latency
> >
> > Hi,
> >
> > Thank you for your questions guys.
> >
> > We are using HBase 0.92 with HDFS 1.0.1.
> >
> > The experiment lasts 15 minutes. The measurements stabilize in the
> > first two minutes of the run.
> >
> > The data is distributed almost evenly across the regionservers so each
> > client hits most of them over the course of the experiment. However,
> > for the data we have, any given multi-get or scan should touch only
> > one or at most two regions.
> >
> > The client caches the locations of the regionservers, so after a
> > couple of minutes of the experiment running, it wouldn't need to
> > re-visit ZooKeeper, I believe. Correct me if I am wrong please.
> >
> > Regards,
> > Yousuf
> >
> >
> > On Thu, Oct 18, 2012 at 2:42 PM, lars hofhansl <lhofha...@yahoo.com>
> > wrote:
> >
> > > Also, what version of HBase/HDFS is this using?
> > >
> > >
> > >
> > >
> > > ----- Original Message -----
> > > From: "Pamecha, Abhishek" <apame...@x.com>
> > > To: "user@hbase.apache.org" <user@hbase.apache.org>
> > > Cc: Ivan Brondino <ibrond...@fi.upm.es>; Ricardo Vilaça <
> > > rmvil...@di.uminho.pt>
> > > Sent: Thursday, October 18, 2012 11:38 AM
> > > Subject: RE: High IPC Latency
> > >
> > > Is it sustained for the same client hitting the same region server
> > > OR
> > does
> > > it get better for the same client-RS combination when run for longer
> > > duration?  Trying to eliminate Zookeeper from this.
> > >
> > > Thanks,
> > > Abhishek
> > >
> > > From: Yousuf Ahmad [mailto:myahm...@gmail.com]
> > > Sent: Thursday, October 18, 2012 11:26 AM
> > > To: user@hbase.apache.org
> > > Cc: Ivan Brondino; Ricardo Vilaça
> > > Subject: High IPC Latency
> > >
> > > Hello,
> > >
> > > We are seeing slow times for read operations in our experiments. We
> > > are hoping that you guys can help us figure out what's going wrong.
> > >
> > > Here are some details:
> > >
> > >   *   We are running a read-only benchmark on our HBase cluster.
> > >   *
> > >   *   There are 10 regionservers, each co-located with a datanode. HDFS
> > > replication is 3x.
> > >   *   All the data read by the experiment is already in the block cache
> > > and the hit ratio is 99%.
> > >   *
> > >   *   We have 10 clients, each with around 400 threads making a mix of
> > > read-only requests involving multi-gets and scans.
> > >   *
> > >   *   We settled on the default client pool type/size (roundrobin/1)
> and
> > a
> > > regionserver handler count of 100 after testing various combinations
> > > to
> > see
> > > what setting worked best.
> > >   *
> > >   *   Our scans are short, fetching around 10 rows on average. Scanner
> > > caching is set to 50.
> > >   *   An average row in a scan has either around 10 columns (small row)
> > or
> > > around 200 columns (big row).
> > >   *
> > >   *   Our multi-gets fetch around 200 rows on average.
> > >   *   An average row in a multi-get has around 10 columns.
> > >   *   Each column holds an integer (encoded into bytes).
> > >   *
> > >   *   None of the machines involved reach CPU, memory, or IO
> saturation.
> > > In fact resource utilization stays quite low.
> > >   *
> > >   *   Our statistics show that the average time for a scan, measured
> > > starting from the first scanner.next() call to the last one which
> > returns a
> > > null, is around 2-3 seconds.
> > >   *   Since we use scanner caching, the major portion of this time
> > (around
> > > 2 seconds) is spent on the first call to next(), while the remaining
> > calls
> > > take a negligible amount of time.
> > >   *   Similarly, we see that a multi-get on average takes around 2
> > seconds.
> > >   *   A single get on average takes around 1 second.
> > > We are not sure what the bottleneck is or where it lies. We thought
> > > we should look deeper into what is going on at the regionservers. We
> > monitored
> > > the IPC calls during one of the experiments. Here is a sample of one
> > > regionserver log:
> > >
> > > 2012-10-18 17:00:09,969 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115483; Served: HRegionInterface#get queueTime=0
> > > processingTime=1
> > > contents=1 Get, 75 bytes
> > > 2012-10-18 17:00:09,969 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115487; Served: HRegionInterface#get queueTime=0
> > > processingTime=0
> > > contents=1 Get, 75 bytes
> > > 2012-10-18 17:00:09,969 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115489; Served: HRegionInterface#get queueTime=0
> > > processingTime=0
> > > contents=1 Get, 75 bytes
> > > 2012-10-18 17:00:09,982 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #111421; Served: HRegionInterface#get queueTime=0
> > > processingTime=0
> > > contents=1 Get, 75 bytes
> > > 2012-10-18 17:00:09,982 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115497; Served: HRegionInterface#multi queueTime=0
> > > processingTime=9
> > > contents=200 Gets
> > > 2012-10-18 17:00:09,984 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115499; Served: HRegionInterface#openScanner queueTime=0
> > > processingTime=0 contents=1 Scan, 63 bytes
> > > 2012-10-18 17:00:09,990 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #115503; Served: HRegionInterface#get queueTime=0
> > > processingTime=0
> > > contents=1 Get, 75 bytes
> > > 2012-10-18 17:00:09,992 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #103230; Served: HRegionInterface#next queueTime=0
> > > processingTime=0
> > > contents=1 Long, 1 Integer
> > > 2012-10-18 17:00:09,994 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #103234; Served: HRegionInterface#close queueTime=0
> > > processingTime=0
> > > contents=1 Long
> > > 2012-10-18 17:00:09,994 DEBUG org.apache.hadoop.ipc.HBaseServer.trace:
> > > Call #103232; Served: HRegionInterface#next queueTime=0
> > > processingTime=0
> > > contents=1 Long, 1 Integer
> > >
> > > I have attached a larger chunk of the logs we collected for this
> > > experiment in case that helps.
> > >
> > > From the logs, we saw that the next() operation at the regionserver
> > > takes
> > > 1 millisecond or less; and a multi-get takes 10 ms on average.
> > > Yet the corresponding times we see at the client are orders of
> > > magnitude higher.
> > > Ping times between the machines are at most 1ms and we are not
> > > saturating the network.
> > >
> > > We would really appreciate some insights from you guys on this.
> > > Where do you suggest we focus our efforts in order to hunt down this
> > > bottleneck/contention?
> > >
> > > Thanks!
> > > Yousuf
> > >
> >
> >
>
>
>
>
>

Reply via email to