2012-01-19 96 views
7

我正在使用MiniDFSCluster來執行junit測試。 現在我剛開始關閉羣集,junit運行綠色。 但我得到這個異常:javax.management.InstanceAlreadyExistsException使用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) 

任何人都可以請給我有關此異常的一些建議嗎?

非常感謝。

+0

任何人都請給我一些建議嗎?或者曾經遇到過這個例外與其他一些事情。 –

回答

5

正在發生的事情是,hadoop正在註冊一個jmx bean進行監控。 hadoop第一次啓動時,它註冊bean,但第二次hadoop啓動時,具有該名稱的bean已被註冊,導致上述錯誤。

要麼你沒有正確關閉MiniDFSCluster,要麼你多次啓動MiniDFSCluster,或者MiniDFSCluster中存在導致它無法正常清理的錯誤。

您是否在拆解方法中調用cluster.shutdown(),如演示here

+0

我每次調用cluster.shutdown()。感謝您提醒,我會再次檢查。 –