Even if I initiate the call via a pooled htable, the MetaScanner seems to use a concrete HTable instance. The constructor invoked seems to create a java ThreadPoolExecutor. I am not 100% sure but I think as long as nothing is submitted to the ThreadPoolExecutor it won't create any threads. I just wanted to confirm this was the case. I do see the connection is shared.

--Kireet



On 5/30/13 7:38 PM, Ted Yu wrote:
HTablePool$**PooledHTable is a wrapper around HTable.

Here is how HTable obtains a connection:

   public HTable(Configuration conf, final byte[] tableName, final
ExecutorService pool)
       throws IOException {
     this.connection = HConnectionManager.getConnection(conf);

Meaning the connection is a shared one based on certain key/value pairs
from conf.

bq. So every call to batch will create a new thread?

I don't think so.

On Thu, May 30, 2013 at 11:28 AM, Kireet 
<[email protected]> wrote:



Thanks, will give it a shot. So I should download 0.94.7 (latest stable)
and run the patch tool on top with the backport? This is a little new to me.

Also, I was looking at the stack below. From my reading of the code, the
HTable.batch() call will always cause the prefetch call to occur, which
will cause a new HTable object to get created. The constructor used in
creating a new thread pool. So every call to batch will create a new
thread? Or the HTable's thread pool never gets used as the pool is only
used for writes? I think I am missing something but just want to confirm.

Thanks
Kireet

On 5/30/13 12:48 PM, Himanshu Vashishtha wrote:

bq. Anoop attached backported patch in HBASE-8655. It should go into

0.94.9, the next release - current is 0.94.8

In case you want it sooner, you can apply 8655 patch and test/verify it.

Thanks,
Himanshu



On Thu, May 30, 2013 at 7:26 AM, Ted Yu <yuzhihong-**
Re5JQEeQqe8AvxtiuMwx3w@public.**gmane.org<yuzhihong-re5jqeeqqe8avxtiumwx3w-xmd5yjdbdmrexy1tmh2...@public.gmane.org>>
wrote:

  Anoop attached backported patch in HBASE-8655

It should go into 0.94.9, the next release - current is 0.94.8

Cheers

On Thu, May 30, 2013 at 7:01 AM, Kireet <kireet-Teh5dPVPL8nQT0dZR+**
[email protected] 
<kireet-teh5dpvpl8nqt0dzr%[email protected]>>
wrote:



How long do backports typically take? We have to go live in a month
ready
or not. Thanks for the quick replies Anoop and Ted.

--Kireet


On 5/30/13 9:20 AM, Ted Yu wrote:

  0.95 client is not compatible with 0.94 cluster. So you cannot use 0.95
client.

Cheers

On May 30, 2013, at 6:12 AM, Kireet <kireet-Teh5dPVPL8nQT0dZR+**
AlfA-XMD5yJDbdMReXY1tMh2IBg@**public.gmane.org<alfa-xmd5yjdbdmrexy1tmh2ibg-xmd5yjdbdmrexy1tmh2...@public.gmane.org><
kireet-Teh5dPVPL8nQT0dZR%**2BAlfA-XMD5yJDbdMReXY1tMh2IBg@**
public.gmane.org<kireet-teh5dpvpl8nqt0dzr%252balfa-xmd5yjdbdmrexy1tmh2ibg-xmd5yjdbdmrexy1tmh2...@public.gmane.org>


wrote:



Would there be a problem if our cluster is 0.94 and we use a 0.95

client?


I am not familiar with the HBase code base, but I did a dump of the
thread that is actually running (below). It seems like it is related

to the

issue you mentioned as the running thread is doing the prefetch logic.
Would pre-splitting tables help here? We are doing some performance

tests

and essentially starting from an empty instance.

java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.****java:503)
at org.apache.zookeeper.****ClientCnxn.submitRequest(**
ClientCnxn.java:1309)
- locked <0x00000000e10cf830> (a org.apache.zookeeper.**
ClientCnxn$Packet)
at org.apache.zookeeper.****ZooKeeper.exists(ZooKeeper.****java:1036)
at org.apache.hadoop.hbase.****zookeeper.****
RecoverableZooKeeper.exists(**
RecoverableZooKeeper.java:172)
at org.apache.hadoop.hbase.****zookeeper.ZKUtil.checkExists(****
ZKUtil.java:450)
at org.apache.hadoop.hbase.****zookeeper.****ZooKeeperNodeTracker.**
checkIfBaseNodeAvailable(****ZooKeeperNodeTracker.java:208)
at org.apache.hadoop.hbase.****zookeeper.RootRegionTracker.**
waitRootRegionLocation(****RootRegionTracker.java:77)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegion(****
HConnectionManager.java:874)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegionInMeta(**
HConnectionManager.java:987)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegion(****
HConnectionManager.java:885)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegion(****
HConnectionManager.java:846)
at org.apache.hadoop.hbase.****client.HTable.finishSetup(**
HTable.java:234)
at org.apache.hadoop.hbase.****client.HTable.<init>(HTable.****
java:174)
at org.apache.hadoop.hbase.****client.MetaScanner.metaScan(**
MetaScanner.java:160)
at org.apache.hadoop.hbase.****client.MetaScanner.access$000(****
MetaScanner.java:54)
at org.apache.hadoop.hbase.****client.MetaScanner$1.connect(****
MetaScanner.java:133)
at org.apache.hadoop.hbase.****client.MetaScanner$1.connect(****
MetaScanner.java:130)
at org.apache.hadoop.hbase.****client.HConnectionManager.**
execute(HConnectionManager.****java:383)
at org.apache.hadoop.hbase.****client.MetaScanner.metaScan(**
MetaScanner.java:130)
at org.apache.hadoop.hbase.****client.MetaScanner.metaScan(**
MetaScanner.java:105)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****prefetchRegionCache(**
HConnectionManager.java:947)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegionInMeta(**

HConnectionManager.java:1002)
- locked <0x00000000e882f778> (a java.lang.Object)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegion(****
HConnectionManager.java:889)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****locateRegion(****
HConnectionManager.java:846)
at org.apache.hadoop.hbase.****client.HConnectionManager$**
HConnectionImplementation.****processBatchCallback(**
HConnectionManager.java:1533)
at org.apache.hadoop.hbase.****client.HConnectionManager$**

  HConnectionImplementation.****processBatch(****
HConnectionManager.java:1418)

at org.apache.hadoop.hbase.****client.HTable.batch(HTable.****java:702)
at org.apache.hadoop.hbase.****client.HTable.get(HTable.java:****671)
at org.apache.hadoop.hbase.****client.HTablePool$**
PooledHTable.get(HTablePool.****java:367)


Thanks
Kireet

On 5/30/13 12:16 AM, Anoop John wrote:

  Can you have a look at issue HBASE-8476?  Seems related?  A fix is
available in HBASE-8346's patch..

-Anoop-

On Thu, May 30, 2013 at 9:21 AM, Kireet <kireet-Teh5dPVPL8nQT0dZR+**
AlfA-XMD5yJDbdMReXY1tMh2IBg@**public.gmane.org<alfa-xmd5yjdbdmrexy1tmh2ibg-xmd5yjdbdmrexy1tmh2...@public.gmane.org>
<

kireet-Teh5dPVPL8nQT0dZR%**2BAlfA-XMD5yJDbdMReXY1tMh2IBg@**
public.gmane.org<kireet-teh5dpvpl8nqt0dzr%252balfa-xmd5yjdbdmrexy1tmh2ibg-xmd5yjdbdmrexy1tmh2...@public.gmane.org>


  wrote:

   We are running hbase 0.94.6 in a concurrent environment and we are

seeing
the majority of our code stuck in this method at the synchronized

block

(line 997). Is there some configuration we can change to avoid it? It
seems
like we could disable prefetching, but that sounds like it could

cause

other problems?

    - org.apache.hadoop.hbase.******client.HConnectionManager$**
HConnectionImplementation.******locateRegionInMeta(byte[], byte[],

byte[],
boolean, java.lang.Object, boolean) @bci=149, line=997 (Compiled

frame)

    - org.apache.hadoop.hbase.******client.HConnectionManager$**
HConnectionImplementation.******locateRegion(byte[], byte[],
boolean,

boolean) @bci=212, line=889 (Compiled frame)
    - org.apache.hadoop.hbase.******client.HConnectionManager$**
HConnectionImplementation.******locateRegion(byte[], byte[])
@bci=5,
line=846
(Compiled frame)
    - org.apache.hadoop.hbase.******client.HConnectionManager$**

  HConnectionImplementation.******processBatchCallback(java.******
util.List,

byte[], java.util.concurrent.******ExecutorService, java.lang.Object[],
org.apache.hadoop.hbase.******client.coprocessor.Batch$******
Callback)
@bci=194,
line=1533 (Compiled frame)
    - org.apache.hadoop.hbase.******client.HConnectionManager$**
HConnectionImplementation.******processBatch(java.util.List,
byte[],
java.util.concurrent.******ExecutorService, java.lang.Object[])

@bci=30,

line=1418 (Compiled frame)
    - org.apache.hadoop.hbase.******client.HTable.batch(java.util.**
**

**List)
@bci=24, line=702 (Compiled frame)
    - org.apache.hadoop.hbase.******client.HTable.get(java.util.****
**List)
@bci=2,
line=671 (Compiled frame)
    - org.apache.hadoop.hbase.******client.HTablePool$**
PooledHTable.get(java.util.******List) @bci=5, line=367 (Compiled

frame)












Reply via email to