hbase-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bing Li <lbl...@gmail.com>
Subject Re: Is "synchronized" required?
Date Mon, 04 Feb 2013 22:40:55 GMT
Dear Nicolas,

If using synchronized is required, the performance must be too low,
right? Are there any other ways to minimize the synchronization
granularity?

Thanks so much!
Bing

On Tue, Feb 5, 2013 at 5:31 AM, Nicolas Liochon <nkeywal@gmail.com> wrote:
> Yes, HTable is not thread safe, and using synchronized around them could
> work, but would be implementation dependent.
> You can have one HTable per request at a reasonable cost since
> https://issues.apache.org/jira/browse/HBASE-4805. It's seems to be
> available in 0.92 as well.
>
> Cheers,
>
> Nicolas
>
>
> On Mon, Feb 4, 2013 at 10:13 PM, Adrien Mogenet <adrien.mogenet@gmail.com>wrote:
>
>> Beware, HTablePool is not totally thread-safe as well:
>> https://issues.apache.org/jira/browse/HBASE-6651.
>>
>>
>> On Mon, Feb 4, 2013 at 9:42 PM, Haijia Zhou <leonster@gmail.com> wrote:
>>
>> > Hi, Bing,
>> >
>> >  Not sure about your scenario but HTable class is not thread safe for
>> > neither reads nor write.
>> >  If you consider writing/reading from a table in a multiple-threaded way,
>> > you can consider using HTablePool.
>> >
>> >  Hope it helps
>> >
>> > HJ
>> >
>> >
>> > On Mon, Feb 4, 2013 at 3:32 PM, Bing Li <lblabs@gmail.com> wrote:
>> >
>> > > Dear Ted and Harsh,
>> > >
>> > > I am sorry I didn't keep the exceptions. It occurred many days ago. My
>> > > current version is 0.92.
>> > >
>> > > Now "synchronized" is removed. Is it correct?
>> > >
>> > > I will test if such exceptions are raised. I will let you know.
>> > >
>> > > Thanks!
>> > >
>> > > Best wishes,
>> > > Bing
>> > >
>> > >
>> > > On Tue, Feb 5, 2013 at 4:25 AM, Ted Yu <yuzhihong@gmail.com> wrote:
>> > > > Bing:
>> > > > Use pastebin.com instead of attaching exception report.
>> > > >
>> > > > What version of HBase are you using ?
>> > > >
>> > > > Thanks
>> > > >
>> > > >
>> > > > On Mon, Feb 4, 2013 at 12:21 PM, Harsh J <harsh@cloudera.com>
wrote:
>> > > >>
>> > > >> What exceptions do you actually receive - can you send them here?
>> > > >> Knowing that is key to addressing your issue.
>> > > >>
>> > > >> On Tue, Feb 5, 2013 at 1:50 AM, Bing Li <lblabs@gmail.com>
wrote:
>> > > >> > Dear all,
>> > > >> >
>> > > >> > When writing data into HBase, sometimes I got exceptions.
I guess
>> > they
>> > > >> > might be caused by concurrent writings. But I am not sure.
>> > > >> >
>> > > >> > My question is whether it is necessary to put "synchronized"
>> before
>> > > >> > the writing methods? The following lines are the sample code.
>> > > >> >
>> > > >> > I think the directive, synchronized, must lower the performance
of
>> > > >> > writing. Sometimes concurrent writing is needed in my system.
>> > > >> >
>> > > >> > Thanks so much!
>> > > >> >
>> > > >> > Best wishes,
>> > > >> > Bing
>> > > >> >
>> > > >> > public synchronized void AddDomainNodeRanks(String domainKey,
int
>> > > >> > timingScale, Map<String, Double> nodeRankMap)
>> > > >> > {
>> > > >> >       List<Put> puts = new ArrayList<Put>();
>> > > >> >       Put domainKeyPut;
>> > > >> >       Put timingScalePut;
>> > > >> >       Put nodeKeyPut;
>> > > >> >       Put rankPut;
>> > > >> >
>> > > >> >       byte[] domainNodeRankRowKey;
>> > > >> >
>> > > >> >       for (Map.Entry<String, Double> nodeRankEntry
:
>> > > >> > nodeRankMap.entrySet())
>> > > >> >       {
>> > > >> >           domainNodeRankRowKey =
>> > > >> > Bytes.toBytes(RankStructure.DOMAIN_NODE_RANK_ROW +
>> > > >> > Tools.GetAHash(domainKey + timingScale + nodeRankEntry.getKey()));
>> > > >> >
>> > > >> >          domainKeyPut = new Put(domainNodeRankRowKey);
>> > > >> >          domainKeyPut.add(RankStructure.DOMAIN_NODE_RANK_FAMILY,
>> > > >> > RankStructure.DOMAIN_NODE_RANK_DOMAIN_KEY_COLUMN,
>> > > >> > Bytes.toBytes(domainKey));
>> > > >> >          puts.add(domainKeyPut);
>> > > >> >
>> > > >> >          timingScalePut = new Put(domainNodeRankRowKey);
>> > > >> >          timingScalePut.add(RankStructure.DOMAIN_NODE_RANK_FAMILY,
>> > > >> > RankStructure.DOMAIN_NODE_RANK_TIMING_SCALE_COLUMN,
>> > > >> > Bytes.toBytes(timingScale));
>> > > >> >         puts.add(timingScalePut);
>> > > >> >
>> > > >> >         nodeKeyPut = new Put(domainNodeRankRowKey);
>> > > >> >         nodeKeyPut.add(RankStructure.DOMAIN_NODE_RANK_FAMILY,
>> > > >> > RankStructure.DOMAIN_NODE_RANK_NODE_KEY_COLUMN,
>> > > >> > Bytes.toBytes(nodeRankEntry.getKey()));
>> > > >> >         puts.add(nodeKeyPut);
>> > > >> >
>> > > >> >         rankPut = new Put(domainNodeRankRowKey);
>> > > >> >         rankPut.add(RankStructure.DOMAIN_NODE_RANK_FAMILY,
>> > > >> > RankStructure.DOMAIN_NODE_RANK_RANKS_COLUMN,
>> > > >> > Bytes.toBytes(nodeRankEntry.getValue()));
>> > > >> >         puts.add(rankPut);
>> > > >> >      }
>> > > >> >
>> > > >> >      try
>> > > >> >      {
>> > > >> >          this.rankTable.put(puts);
>> > > >> >      }
>> > > >> >      catch (IOException e)
>> > > >> >      {
>> > > >> >          e.printStackTrace();
>> > > >> >      }
>> > > >> > }
>> > > >>
>> > > >>
>> > > >>
>> > > >> --
>> > > >> Harsh J
>> > > >
>> > > >
>> > >
>> >
>>
>>
>>
>> --
>> Adrien Mogenet
>> 06.59.16.64.22
>> http://www.mogenet.me
>>

Mime
View raw message