Sangjin Lee created HBASE-15686:
-----------------------------------
Summary: unable to dynamically load a table coprocessor if it
belongs in org.apache.hadoop
Key: HBASE-15686
URL: https://issues.apache.org/jira/browse/HBASE-15686
Project: HBase
Issue Type: Bug
Components: Coprocessors
Affects Versions: 1.0.1
Reporter: Sangjin Lee
As part of Hadoop's Timeline Service v.2 (YARN-2928), we're adding a table
coprocessor (YARN-4062). However, we're finding that the coprocessor cannot be
loaded dynamically. A relevant snippet for the exception:
{noformat}
java.io.IOException: Class
org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor
cannot be loaded
at
org.apache.hadoop.hbase.master.HMaster.sanityCheckTableDescriptor(HMaster.java:1329)
at org.apache.hadoop.hbase.master.HMaster.createTable(HMaster.java:1269)
at
org.apache.hadoop.hbase.master.MasterRpcServices.createTable(MasterRpcServices.java:398)
at
org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:42436)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2031)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:107)
at
org.apache.hadoop.hbase.ipc.RpcExecutor.consumerLoop(RpcExecutor.java:130)
at org.apache.hadoop.hbase.ipc.RpcExecutor$1.run(RpcExecutor.java:107)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: Class
org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor
cannot be loaded
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.testTableCoprocessorAttrs(RegionCoprocessorHost.java:324)
at
org.apache.hadoop.hbase.master.HMaster.checkClassLoading(HMaster.java:1483)
at
org.apache.hadoop.hbase.master.HMaster.sanityCheckTableDescriptor(HMaster.java:1327)
... 8 more
Caused by: java.lang.ClassNotFoundException:
org.apache.hadoop.yarn.server.timelineservice.storage.flow.FlowRunCoprocessor
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at
org.apache.hadoop.hbase.util.CoprocessorClassLoader.loadClass(CoprocessorClassLoader.java:275)
at
org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.testTableCoprocessorAttrs(RegionCoprocessorHost.java:322)
... 10 more
{noformat}
We tracked it down to the fact that {{CoprocessorClassLoader}} regarding all
hadoop classes as exempt from loading from the coprocessor jar. Since our
coprocessor sits in the coprocessor jar, and yet the loading of this class is
delegated to the parent which does not have this jar, the classloading fails.
What would be nice is the ability to exclude certain classes from the exempt
classes so that they can be loaded via table coprocessor classloader. See
hadoop's {{ApplicationClassLoader}} for a similar feature.
Is there any other way to load this coprocessor at the table scope?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)