2012-04-04 11 views
3

いくつかのHBaseコードを実行しているときに次の問題が発生しています。それはMXBeanのビットから始まったようです。私はこれについて全く無知だが、かなり低いレベルに見える。JMX Exception "原因: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_(' ')の配列(' '')を指定します。 Javaのネイティブバイトの配列は、 '[B'の記述子を持つため、' makeArrayOrCollectionConverter'の中の何かが混乱します。独自のMXBeanを定義しましたか? –

+0

いいえ、何も教科書初心者レベルのコードよりも何もしません。 –

+0

@NoahWatkinsあなたは回避策を見つけることができます、私はまた、ubuntu上でhbaseを使用していると同じ問題(hbaseでテーブルを有効にするとトリガ)が発生します。 – Richard

答えて

0

このように見える彼らはそれが私が以下source codeを見た後に同意する傾向があるJMXの問題、だと思う

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

のHBase JIRA

に報告されています。プリミティブ配列が見えないというコメントに注意してください。どういうわけか、プリミティブ配列がここに入って、それがオブジェクトクラスであるかのように扱われています。

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の何かがそれを引き起こしていることを意味しますか? –

+0

これはJMXの問題のようなものです。そのJMXクラスにデバッグし、渡されている 'collectionType'と' elementType'引数を調べることができます。あなたの特定のコードだけがバグを捉えているようだから、バグを突き止める唯一のオプションかもしれません。 –

0

HBaseを実行するためにOpenJDKを使用していないことを確認します。 prerequisite list in the online docsからは明らかではありませんが、明らかに古いHbaseバージョンの中にはOracle Javaが必要なものもあります。 this linkを参照してください。

関連する問題