2012-01-19 10 views
7

Sto usando MiniDFSCluster per eseguire i test di junit. Ora inizio e chiudo il cluster, la junit è verde. Ma ottengo questa eccezione:javax.management.InstanceAlreadyExistsException quando si utilizza hadoop MiniDFSCluster

javax.management.InstanceAlreadyExistsException: MXBean already registered with name Hadoop:service=NameNode,name=MetricsSystem,sub=Control 
at com.sun.jmx.mbeanserver.MXBeanLookup.addReference(MXBeanLookup.java:120) 
at com.sun.jmx.mbeanserver.MXBeanSupport.register(MXBeanSupport.java:143) 
at com.sun.jmx.mbeanserver.MBeanSupport.preRegister2(MBeanSupport.java:183) 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:941) 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917) 
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312) 
at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482) 
at org.apache.hadoop.metrics2.util.MBeans.register(MBeans.java:56) 
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.initSystemMBean(MetricsSystemImpl.java:500) 
at org.apache.hadoop.metrics2.impl.MetricsSystemImpl.init(MetricsSystemImpl.java:140) 
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:40) 
at org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1483) 
at org.apache.hadoop.hdfs.server.datanode.DataNode.instantiateDataNode(DataNode.java:1459) 
at org.apache.hadoop.hdfs.MiniDFSCluster.startDataNodes(MiniDFSCluster.java:417) 
at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:280) 
at org.apache.hadoop.hdfs.MiniDFSCluster.<init>(MiniDFSCluster.java:124) 
at com.myCompany.TestAll.testInit(TestAll.java:30) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at junit.framework.TestCase.runTest(TestCase.java:168) 
at junit.framework.TestCase.runBare(TestCase.java:134) 
at junit.framework.TestResult$1.protect(TestResult.java:110) 
at junit.framework.TestResult.runProtected(TestResult.java:128) 
at junit.framework.TestResult.run(TestResult.java:113) 
at junit.framework.TestCase.run(TestCase.java:124) 
at junit.framework.TestSuite.runTest(TestSuite.java:232) 
at junit.framework.TestSuite.run(TestSuite.java:227) 
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Qualcuno potrebbe darmi qualche suggerimento su questa eccezione?

Grazie mille.

+0

Chiunque prego di darmi qualche suggerimento? O mai incontrato questa eccezione con alcune altre cose. –

risposta

5

Che cosa sta succedendo è che hadoop sta registrando un jmx bean per il monitoraggio. La prima volta che hadoop si avvia, registra il bean, ma la seconda volta che hadoop parte, un bean con quel nome è già registrato, dando come risultato l'errore sopra.

O non si sta spegnendo MiniDFSCluster correttamente, o lo si sta avviando più di una volta, o c'è un bug in MiniDFSCluster che non lo fa in modo corretto.

Stai chiamando cluster.shutdown() in un metodo di smontaggio, come dimostrato here.

+0

Sto chiamando cluster.shutdown() ogni volta. Grazie per avermelo ricordato, controllerò di nuovo. –

Problemi correlati