Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.6.3
-
None
-
Reviewed
Description
Currently if a user uses HBase and enables the client/job classloader, the job fails to load HBase classes. For example,
java.lang.NoClassDefFoundError: Lorg/apache/hadoop/hbase/client/HBaseAdmin; at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2509) at java.lang.Class.getDeclaredField(Class.java:1959) at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1703) at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:72) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:484) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:472) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:472) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:369)
It is because the HBase classes (org.apache.hadoop.hbase.*) meet the system classes criteria which are supposed to be loaded strictly from the base classloader. But hadoop does not provide HBase as a dependency.
We should exclude the HBase classes from the system classes until/unless HBase is provided by a future version of hadoop.