hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sangjin Lee (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HBASE-15686) unable to dynamically load a table coprocessor if it belongs in org.apache.hadoop
Date Thu, 21 Apr 2016 19:01:25 GMT
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)

Mime
View raw message