Yes, I just ran into the same issue. Sigh. I guess one workaround is to try to make AsyncHBase's jar show up first on the class path, although that's not always as easy to do as it might sound.
I'm copying hbase-dev so that they are aware of the problem. My trick was ported to HBase in HBASE-9867, but it wasn't ported properly. It doesn't look like the zeroCopyGetBytes helper is used in HBase (I checked 0.96, 0.98, and trunk). So the best course of action seems to be to fix the signature of the method in HBase. I created an issue and proposed a patch for HBase here: https://issues.apache.org/jira/browse/HBASE-10422 On Tue, Jan 14, 2014 at 1:49 AM, <[email protected]> wrote: > * hbase-protocol-0.96.1.1-hadoop2.jar > * asynchbase-1.5.0-SNAPSHOT.jar > > Both packages contains class > "com.google.protobuf.ZeroCopyLiteralByteString", but with different API: > * public static byte[] zeroCopyGetBytes(ByteString buf) > * public static byte[] zeroCopyGetBytes(final LiteralByteString buf) > > > When running a program with both dependencies, following error will occur in > most cases: > > 14/01/14 13:45:41 ERROR async.RegionClient:1093 - Unexpected exception from > downstream on [id: 0x33adfae4, /127.0.0.1:37648 => /127.0.0.1:34508] > java.lang.NoSuchMethodError: > com.google.protobuf.ZeroCopyLiteralByteString.zeroCopyGetBytes(Lcom/google/protobuf/ByteString;)[B > at org.hbase.async.Bytes.get(Bytes.java:297) > at org.hbase.async.KeyValue.fromCell(KeyValue.java:311) > at org.hbase.async.GetRequest.convertResult(GetRequest.java:514) > at org.hbase.async.GetRequest.extractResponse(GetRequest.java:496) > at > org.hbase.async.RegionClient$1GetClosestRowBefore.deserialize(RegionClient.java:651) > at org.hbase.async.RegionClient.decode(RegionClient.java:1308) > at org.hbase.async.RegionClient.decode(RegionClient.java:89) > at > org.jboss.netty.handler.codec.replay.ReplayingDecoder.callDecode(ReplayingDecoder.java:500) > at > org.jboss.netty.handler.codec.replay.ReplayingDecoder.messageReceived(ReplayingDecoder.java:435) > at org.hbase.async.RegionClient.handleUpstream(RegionClient.java:1080) > at > org.hbase.async.HBaseClient$RegionClientPipeline.sendUpstream(HBaseClient.java:2652) > at > org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) > at > org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) > at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:88) > at > org.jboss.netty.channel.socket.nio.AbstractNioWorker.process(AbstractNioWorker.java:108) > at > org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318) > at > org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:89) > at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:178) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:744) > > It will be very simple to rename ZeroCopyLiteralByteString class in > asynchbase into something different and republish new jar. > Hope, someone may propose better solution. -- Benoit "tsuna" Sigoure
