2012-04-04 50 views
3

运行一些HBase代码时出现以下问题。它看起来像源自MXBean位。我完全无能为力,但看起来很低级。JMX异常“导致:java.lang.ClassNotFoundException:[Lbyte;”

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 
+0

描述符'[Lbyte;]指定一个名为'byte'的类的_Object_('L')的数组(''''),通常这是不可能的。一个Java本地字节数组将会有一个'[B'的描述符,所以'makeArrayOrCollectionConverter'中的某些内容会被混淆。您是否定义了自己的MXBeans? – 2012-04-05 01:38:18

+0

不,我没有做任何事情比一些教科书初学者基础级别的代码。 – 2012-04-05 02:20:09

+0

@NoahWatkins你找到解决方法,我也使用hbase over ubuntu并遇到同样的问题(在hbase中启用表时触发)。 – Richard 2012-10-15 15:13:07

回答

0

貌似这已经报道了HBase的JIRA

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

他们认为这是一个JMX的问题,我倾向于看下面的source code后同意。请注意有关从不看原始数组的注释。不知何故,一个原始数组在这里进入,并被视为对象类。

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); 
+0

我报告了这个问题,当他们认为它是JMX时来到了这里。任何建议去哪里去弄清楚这一点?这是否意味着HBase中的某些内容导致了它? – 2012-04-05 02:16:34

+0

它看起来像一个JMX问题。您可以调试到该JMX类并确定传入的'collectionType'和'elementType'参数。由于似乎只有您的特定代码才会显示错误,因此这可能是查明错误的唯一选项。 – 2012-04-05 03:57:06