JMX Exception "Caused by: java.lang.ClassNotFoundException: [Lbyte;"

Go To StackoverFlow.com

3

I'm getting the following problem when running some HBase code. It looks like it is originating in the MXBean bits. I'm totally clueless on this, but looks pretty low-level.

javax.management.NotCompliantMBeanException: org.apache.hadoop.hbase.master.MXBean: Method org.apache.hadoop.hbase.master.MXBean.getRegionServers has parameter or return type that cannot be translated into an open type
    at com.sun.jmx.mbeanserver.Introspector.throwException(Introspector.java:419)
    at com.sun.jmx.mbeanserver.MBeanAnalyzer.<init>(MBeanAnalyzer.java:118)
    at com.sun.jmx.mbeanserver.MBeanAnalyzer.analyzer(MBeanAnalyzer.java:104)
    at com.sun.jmx.mbeanserver.MXBeanIntrospector.getAnalyzer(MXBeanIntrospector.java:71)
    at com.sun.jmx.mbeanserver.MBeanIntrospector.getPerInterface(MBeanIntrospector.java:181)
    at com.sun.jmx.mbeanserver.MBeanSupport.<init>(MBeanSupport.java:136)
    at com.sun.jmx.mbeanserver.MXBeanSupport.<init>(MXBeanSupport.java:66)
    at com.sun.jmx.mbeanserver.Introspector.makeDynamicMBean(Introspector.java:184)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:936)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:330)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:516)
    at org.apache.hadoop.metrics.util.MBeanUtil.registerMBean(MBeanUtil.java:58)
    at org.apache.hadoop.hbase.master.HMaster.registerMBean(HMaster.java:1646)
    at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:527)
    at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:336)
    at java.lang.Thread.run(Thread.java:679)
Caused by: java.lang.IllegalArgumentException: Method org.apache.hadoop.hbase.master.MXBean.getRegionServers has parameter or return type that cannot be translated into an open type
    at com.sun.jmx.mbeanserver.ConvertingMethod.from(ConvertingMethod.java:45)
    at com.sun.jmx.mbeanserver.MXBeanIntrospector.mFrom(MXBeanIntrospector.java:81)
    at com.sun.jmx.mbeanserver.MXBeanIntrospector.mFrom(MXBeanIntrospector.java:51)
    at com.sun.jmx.mbeanserver.MBeanAnalyzer.initMaps(MBeanAnalyzer.java:135)
    at com.sun.jmx.mbeanserver.MBeanAnalyzer.<init>(MBeanAnalyzer.java:116)
    ... 14 more
Caused by: javax.management.openmbean.OpenDataException: Cannot obtain array class
    at com.sun.jmx.mbeanserver.OpenConverter.openDataException(OpenConverter.java:1389)
    at com.sun.jmx.mbeanserver.OpenConverter.makeArrayOrCollectionConverter(OpenConverter.java:346)
    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:295)
    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:277)
    at com.sun.jmx.mbeanserver.OpenConverter.makeTabularConverter(OpenConverter.java:376)
    at com.sun.jmx.mbeanserver.OpenConverter.makeParameterizedConverter(OpenConverter.java:417)
    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:312)
    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:277)
    at com.sun.jmx.mbeanserver.OpenConverter.makeCompositeConverter(OpenConverter.java:482)
    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:309)
    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:277)
    at com.sun.jmx.mbeanserver.OpenConverter.makeTabularConverter(OpenConverter.java:377)
    at com.sun.jmx.mbeanserver.OpenConverter.makeParameterizedConverter(OpenConverter.java:417)
    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:312)
    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:277)
    at com.sun.jmx.mbeanserver.ConvertingMethod.<init>(ConvertingMethod.java:197)
    at com.sun.jmx.mbeanserver.ConvertingMethod.from(ConvertingMethod.java:40)
    ... 18 more
Caused by: java.lang.ClassNotFoundException: [Lbyte;
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at com.sun.jmx.mbeanserver.OpenConverter.makeArrayOrCollectionConverter(OpenConverter.java:344)
    ... 33 more
2012-04-04 23:30
by Noah Watkins
The descriptor [Lbyte; names an array ([) of Object (L) of a class named byte, which isn't normally possible. An array of Java native bytes would have a descriptor of [B, so something within makeArrayOrCollectionConverter is confused. Did you define your own MXBeans - Jim Garrison 2012-04-05 01:38
No. I'm doing nothing much more than some textbook beginner-hbase level code - Noah Watkins 2012-04-05 02:20
@NoahWatkins do you find workaround, I am also using hbase over ubuntu and encounter the same problem (triggered when enabling a table in hbase) - Richard 2012-10-15 15:13


0

Looks like this has been reported on the HBase JIRA

https://issues.apache.org/jira/browse/HBASE-5718

They think it's a JMX issue, which I tend to agree with after looking at the source code below. Note the comment about never seeing primitive arrays. Somehow a primitive array made it into here, and is being treated as if it were an object class.

  323       /* Make the converter for an array type, or a collection such as
  324        * List<String> or Set<Integer>.  We never see one-dimensional
  325        * primitive arrays (e.g. int[]) here because they use the identity
  326        * converter and are registered as such in the static initializer.
  327        */
  328       private static OpenConverter
  329           makeArrayOrCollectionConverter(Type collectionType, Type elementType)
  330               throws OpenDataException {
  331   
  332           final OpenConverter elementConverter = toConverter(elementType);
  333           final OpenType<?> elementOpenType = elementConverter.getOpenType();
  334           final ArrayType<?> openType = ArrayType.getArrayType(elementOpenType);
  335           final Class<?> elementOpenClass = elementConverter.getOpenClass();
  336   
  337           final Class<?> openArrayClass;
  338           final String openArrayClassName;
  339           if (elementOpenClass.isArray())
  340               openArrayClassName = "[" + elementOpenClass.getName();
  341           else
  342               openArrayClassName = "[L" + elementOpenClass.getName() + ";";
  343           try {
  344               openArrayClass = Class.forName(openArrayClassName);
2012-04-05 01:48
by Jim Garrison
I reported that issue, and came here when they thought it was JMX. Any suggestions on where to go to figure this out? Does this mean that something in HBase is causing it - Noah Watkins 2012-04-05 02:16
It does look like a JMX problem. You could debug into that JMX class and determine the collectionType and elementType arguments being passed in. Since it seems only your specific code surfaces the bug, this might be the only option to pinpoint the bug - Jim Garrison 2012-04-05 03:57


0

Verify you are not using OpenJDK to run HBase. Although not obvious from the prerequisite list in the online docs, apparently some older Hbase versions may require Oracle Java. See this link.

2015-01-29 23:21
by lreeder
Ads