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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 > > > > >
