Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The HBase binding does not report a clear error message on encountering version incompatibility #343

Closed
gkamat opened this issue Jul 6, 2015 · 4 comments

Comments

@gkamat
Copy link
Collaborator

gkamat commented Jul 6, 2015

The HBase binding in YCSB 0.2.0 when built with the shipped pom.xml
(which specifies HBase 1.0.0) does not report an informative error
message when run against a cluster running an earlier version of HBase
(0.94 or 0.98):

YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.HBaseClient -p columnfamily=cf -p workload=com.yahoo.ycsb.workloads.CoreWorkload -P workloads/workloada -p operationcount=1000000 -s -t
Loading workload...
Starting test.
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/apache/hadoop/hbase/HBaseConfiguration : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.yahoo.ycsb.db.HBaseClient.(HBaseClient.java:55)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
at com.yahoo.ycsb.DBFactory.newDB(DBFactory.java:39)
at com.yahoo.ycsb.Client.main(Client.java:737)

In some cases, there is no specific message, but if status reporting
is turned on, there are zero transactions reported:

15/07/02 19:16:58 INFO zookeeper.ClientCnxn: Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x14e51b1760a000c, negotiated timeout = 40000
2015-07-02 19:17:08:588 10 sec: 0 operations;
2015-07-02 19:17:18:588 20 sec: 0 operations;

2015-07-03 10:36:46:913 0 sec: 0 operations;
Exception in thread "Thread-2" java.lang.NoSuchFieldError: HBASE_CLIENT_RPC_MAXATTEMPTS
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionKey.(HConnectionManager.java:446)
at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:199)
at org.apache.hadoop.hbase.client.HTable.(HTable.java:151)
at org.apache.hadoop.hbase.client.HTable.(HTable.java:129)
at com.yahoo.ycsb.db.HBaseClient.getHTable(HBaseClient.java:128)
at com.yahoo.ycsb.db.HBaseClient.read(HBaseClient.java:153)
at com.yahoo.ycsb.DBWrapper.read(DBWrapper.java:92)
at com.yahoo.ycsb.workloads.CoreWorkload.doTransactionRead(CoreWorkload.java:650)
at com.yahoo.ycsb.workloads.CoreWorkload.doTransaction(CoreWorkload.java:566)
at com.yahoo.ycsb.ClientThread.run(Client.java:235)
2015-07-03 10:36:56:908 10 sec: 0 operations;
[OVERALL], RunTime(ms), 130.0
[OVERALL], Throughput(ops/sec), 0.0

Similarly, if the binding is built with HBase 0.94 and YCSB is run
against a newer version, the following message may be reported:

2015-07-03 10:36:46:913 0 sec: 0 operations;
Exception in thread "Thread-2" java.lang.NoSuchFieldError: HBASE_CLIENT_RPC_MAXATTEMPTS
at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionKey.(HConnectionManager.java:446)
at org.apache.hadoop.hbase.client.HConnectionManager.getConnection(HConnectionManager.java:199)
at org.apache.hadoop.hbase.client.HTable.(HTable.java:151)
at org.apache.hadoop.hbase.client.HTable.(HTable.java:129)
at com.yahoo.ycsb.db.HBaseClient.getHTable(HBaseClient.java:128)
at com.yahoo.ycsb.db.HBaseClient.read(HBaseClient.java:153)
at com.yahoo.ycsb.DBWrapper.read(DBWrapper.java:92)
at com.yahoo.ycsb.workloads.CoreWorkload.doTransactionRead(CoreWorkload.java:650)
at com.yahoo.ycsb.workloads.CoreWorkload.doTransaction(CoreWorkload.java:566)
at com.yahoo.ycsb.ClientThread.run(Client.java:235)
2015-07-03 10:36:56:908 10 sec: 0 operations;
[OVERALL], RunTime(ms), 130.0
[OVERALL], Throughput(ops/sec), 0.0

In addition, it would be helpful to update the README to provide
information on the changes necessary to update the HBase version
before invoking maven to build the package, for instance, hbase-client
may need to be changed to hbase, and the slf4j version may need to be
reverted to manage compatibility with earlier HBase versions.

Apart from these issues, the HBase binding does work properly once the
build HBase version is consistent with the version running on the
cluster.

@busbey
Copy link
Collaborator

busbey commented Jul 7, 2015

Exception in thread "main" java.lang.UnsupportedClassVersionError:
org/apache/hadoop/hbase/HBaseConfiguration : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)

This one looks like a JVM error. class version 51 is Java 7, so a java 6 JVM will report this error.

In addition, it would be helpful to update the README to provide
information on the changes necessary to update the HBase version
before invoking maven to build the package, for instance, hbase-client
may need to be changed to hbase, and the slf4j version may need to be
reverted to manage compatibility with earlier HBase versions.

We shouldn't require any source changes when folks want to run against different HBase versions we list as supported. This sounds like we need to break out the 0.94 / 0.98 clients into their own modules ala #272 .

Any objection to listing this as a known issue for #266 and fixing for next release?

@cmccoy
Copy link
Collaborator

cmccoy commented Jul 7, 2015

Sounds good to me.
On Jul 6, 2015 8:12 PM, "Sean Busbey" notifications@github.com wrote:

Exception in thread "main" java.lang.UnsupportedClassVersionError:
org/apache/hadoop/hbase/HBaseConfiguration : Unsupported major.minor
version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)

This one looks like a JVM error. class version 51 is Java 7, so a java 6
JVM will report this error.

In addition, it would be helpful to update the README to provide
information on the changes necessary to update the HBase version
before invoking maven to build the package, for instance, hbase-client
may need to be changed to hbase, and the slf4j version may need to be
reverted to manage compatibility with earlier HBase versions.

We shouldn't require any source changes when folks want to run against
different HBase versions we list as supported. This sounds like we need to
break out the 0.94 / 0.98 clients into their own modules ala #272
#272 .

Any objection to listing this as a known issue for #266
#266 and fixing for next
release?


Reply to this email directly or view it on GitHub
#343 (comment)
.

@busbey
Copy link
Collaborator

busbey commented Feb 1, 2016

Is this still an issue now that the hbase bindings are broken out by major version?

@risdenk
Copy link
Collaborator

risdenk commented Jan 19, 2017

Closing since most likely isn't an issue with major version HBase bindings.

@risdenk risdenk closed this as completed Jan 19, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants