2012-04-04 94 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