hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mohit Anchlia <mohitanch...@gmail.com>
Subject Re: Insert blocked
Date Tue, 24 Jul 2012 19:27:42 GMT
I removed the close call and it works. So it looks like close call should
be called only at the end. But then how does the pool know that the object
is available if it's not returned to the pool explicitly?

On Tue, Jul 24, 2012 at 10:00 AM, Mohit Anchlia <mohitanchlia@gmail.com>wrote:

>
>
>  On Tue, Jul 24, 2012 at 3:09 AM, Lyska Anton <antony@wildec.com> wrote:
>
>> Hi,
>>
>> after first insert you are closing your table in finally block. thats why
>> thread hangs
>>
>
> I thought I need to close HTableInterface to return it back to the pool.
> Is that not the case?
>
>>
>> 24.07.2012 3:41, Mohit Anchlia пишет:
>>
>>> I am now using HTablePool but still the call hangs at "put". My code is
>>> something like this:
>>>
>>>
>>> hTablePool = *new* HTablePool(config,*MAX_POOL_**SIZE*);
>>>
>>> result = *new* SessionTimelineDAO(hTablePool.**getTable(t.name()),
>>> ColumnFamily.*S_T_MTX*);
>>>
>>>    public SessionTimelineDAO(**HTableInterface hTableInterface,
>>> ColumnFamily
>>> cf){
>>>    this.tableInt = hTableInterface;
>>>    this.cf = cf.name().getBytes();
>>>    log.info("Table " + hTableInterface + " " + cf);
>>>   }
>>>
>>>   @Override
>>>   public void create(DataStoreModel dm) throws DataStoreException {
>>>    if(null == dm || null == dm.getKey()){
>>>     log.error("DataStoreModel is invalid");
>>>     return;
>>>    }
>>>
>>>    Put p = new Put(dm.getKey().array());
>>>
>>>    for(ByteBuffer bf : dm.getCols().keySet()){
>>>     p.add(cf, bf.array(), dm.getColumnValue(bf).array())**;
>>>    }
>>>
>>>    try {
>>>     log.info("In create ");
>>>     tableInt.put(p);
>>>    } catch (IOException e) {
>>>     log.error("Error writing " , e);
>>>     throw new DataStoreException(e);
>>>    } finally{
>>>     cleanUp();
>>>
>>>    }
>>>   }
>>>
>>>
>>>   private void cleanUp() {
>>>    if(null != tableInt){
>>>     try {
>>>      tableInt.close();
>>>     } catch (IOException e) {
>>>      log.error("Failed while closing table interface", e);
>>>     }
>>>    }
>>>   }
>>> On Mon, Jul 23, 2012 at 4:15 PM, Mohit Anchlia <mohitanchlia@gmail.com
>>> >wrote:
>>>
>>>
>>>>   On Mon, Jul 23, 2012 at 3:54 PM, Elliott Clark <
>>>> eclark@stumbleupon.com>wrote:
>>>>
>>>> HTable is not thread safe[1]. It's better to use HTablePool if you want
>>>>> to
>>>>> share things across multiple threads.[2]
>>>>>
>>>>> 1
>>>>> http://hbase.apache.org/**apidocs/org/apache/hadoop/**
>>>>> hbase/client/HTable.html<http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTable.html>
>>>>> 2
>>>>>
>>>>> http://hbase.apache.org/**apidocs/org/apache/hadoop/**
>>>>> hbase/client/HTablePool.html<http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/HTablePool.html>
>>>>>
>>>>> Thanks! I'll change my code to use HtablePool
>>>>> On Mon, Jul 23, 2012 at 3:48 PM, Mohit Anchlia <mohitanchlia@gmail.com
>>>>>
>>>>>> wrote:
>>>>>> I am writing a stress tool to test my specific use case. In my current
>>>>>> implementation HTable is a global static variable that I initialize
>>>>>> just
>>>>>> once and use it accross multiple threads. Is this ok?
>>>>>>
>>>>>> My row key consists of (timestamp - (timestamp % 1000)) and cols
are
>>>>>> counters. What I am seeing is that when I run my test after first
row
>>>>>> is
>>>>>> created the application just hangs. I just wanted to check if there
>>>>>> are
>>>>>> obvious things that I should watch out for.
>>>>>>
>>>>>> I am currently testing few threads in eclipse, but I'll still try
and
>>>>>> generate stackTrace
>>>>>>
>>>>>>
>>>>
>>
>

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