You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "kanwaljeet sachdev (JIRA)" <ji...@apache.org> on 2018/03/27 16:15:00 UTC

[jira] [Commented] (HBASE-15686) Add override mechanism for the exempt classes when dynamically loading table coprocessor

    [ https://issues.apache.org/jira/browse/HBASE-15686?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16415855#comment-16415855 ] 

kanwaljeet sachdev commented on HBASE-15686:
--------------------------------------------

I am hitting the class loader exception shared in the post above with the following setup config
 # Hbase 2.0 beta1 and beta2
 # HDFS 3.0 alpha 4
 # I I pull the hadoop code from trunk branch and use hadoop-yarn-server-timelineservice-hbase-coprocessor-3.2.0-SNAPSHOT.jar on the machine to later create the schema for ATSV2 and get the same exception as shared above. 

Looking at this thread, I would assume the fix for class loading already exists in Hbase2.0 and hence must be there in beta as well. Could someone share why this is still happening?

> Add override mechanism for the exempt classes when dynamically loading table coprocessor
> ----------------------------------------------------------------------------------------
>
>                 Key: HBASE-15686
>                 URL: https://issues.apache.org/jira/browse/HBASE-15686
>             Project: HBase
>          Issue Type: Improvement
>          Components: Coprocessors
>    Affects Versions: 1.0.1
>            Reporter: Sangjin Lee
>            Assignee: Ted Yu
>            Priority: Major
>             Fix For: 1.4.0, 0.98.20, 2.0.0
>
>         Attachments: 15686.v2.txt, 15686.v3.txt, 15686.v4.txt, 15686.v5.txt, 15686.v6.txt, 15686.wip
>
>
> 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
(v7.6.3#76005)