Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-6589

RegionServer can't load class for dynamically loaded coprocessors with self defined class

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Incomplete
    • None
    • None
    • Coprocessors, regionserver
    • None

    Description

      When using coprocessor with custom classes like LongColumnInterpreter(mine is MultiColumnSchema), the coprocessor can not work for hot deploy, if the custom classes do not deploy in the regionserver's classpath. Although the self-defined class is deployed in the regions' classpath through hdfs jar.

      The exception threw at the regionserver's log:

      2012-08-15 16:24:24,403 ERROR org.apache.hadoop.hbase.io.HbaseObjectWritable: Error in readFields
      java.io.IOException: Can't find class com.taobao.hbase.coprocessor.MultiColumnSchema
              at org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:674)
              at org.apache.hadoop.hbase.client.coprocessor.Exec.readFields(Exec.java:114)
              at org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:682)
              at org.apache.hadoop.hbase.ipc.Invocation.readFields(Invocation.java:125)
              at org.apache.hadoop.hbase.ipc.HBaseServer$Connection.processData(HBaseServer.java:1292)
              at org.apache.hadoop.hbase.ipc.HBaseServer$Connection.readAndProcess(HBaseServer.java:1207)
              at org.apache.hadoop.hbase.ipc.HBaseServer$Listener.doRead(HBaseServer.java:735)
              at org.apache.hadoop.hbase.ipc.HBaseServer$Listener$Reader.doRunLoop(HBaseServer.java:524)
              at org.apache.hadoop.hbase.ipc.HBaseServer$Listener$Reader.run(HBaseServer.java:499)
              at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
              at java.lang.Thread.run(Thread.java:662)
      Caused by: java.lang.ClassNotFoundException: com.taobao.hbase.coprocessor.MultiColumnSchema
              at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
              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 java.lang.Class.forName0(Native Method)
              at java.lang.Class.forName(Class.java:247)
              at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:943)
              at org.apache.hadoop.hbase.io.HbaseObjectWritable.getClassByName(HbaseObjectWritable.java:784)
              at org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:671)
              ... 11 more
      
      

      It is similar as HBASE-4946, but I do not know how to solve this bug.
      If add these custom class to the RegionServer's classloader may fix it, but it is conflicted with HBASE-6308 to prevent dependency conflicts.
      Does anyone have some idea?

      Attachments

        Activity

          People

            Unassigned Unassigned
            xingshi ShiXing
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: