使用hadoop MiniDFSCluster时的javax.management.InstanceAlreadyExistsException

使用hadoop MiniDFSCluster时的javax.management.InstanceAlreadyExistsException,java,junit,hadoop,hdfs,Java,Junit,Hadoop,Hdfs,我正在使用MiniDFSCluster进行junit测试。 现在我只需启动并关闭集群,junit运行绿色。 但我有一个例外: javax.management.InstanceAlreadyExistsException: MXBean already registered with name Hadoop:service=NameNode,name=MetricsSystem,sub=Control at com.sun.jmx.mbeanserver.MXBeanLookup.addRefe

我正在使用MiniDFSCluster进行junit测试。 现在我只需启动并关闭集群,junit运行绿色。 但我有一个例外:

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)
javax.management.instancealreadyexistException:MXBean已注册名为Hadoop:service=NameNode,name=MetricsSystem,sub=Control
位于com.sun.jmx.mbeanserver.MXBeanLookup.addReference(MXBeanLookup.java:120)
位于com.sun.jmx.mbeanserver.MXBeanSupport.register(MXBeanSupport.java:143)
位于com.sun.jmx.mbeanserver.MBeanSupport.preRegister2(MBeanSupport.java:183)
位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:941)
位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
位于com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
位于com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
位于org.apache.hadoop.metrics2.util.MBeans.register(MBeans.java:56)
在org.apache.hadoop.metrics2.impl.MetricSystemImpl.initSystemMBean(metricSystemImpl.java:500)
位于org.apache.hadoop.metrics2.impl.MetricSystemImpl.init(metricSystemImpl.java:140)
位于org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.init(DefaultMetricsSystem.java:40)
位于org.apache.hadoop.metrics2.lib.DefaultMetricsSystem.initialize(DefaultMetricsSystem.java:50)
位于org.apache.hadoop.hdfs.server.datanode.datanode.InstanceDataNode(datanode.java:1483)
位于org.apache.hadoop.hdfs.server.datanode.datanode.InstanceDataNode(datanode.java:1459)
位于org.apache.hadoop.hdfs.MiniDFSCluster.startDataNodes(MiniDFSCluster.java:417)
位于org.apache.hadoop.hdfs.MiniDFSCluster.(MiniDFSCluster.java:280)
位于org.apache.hadoop.hdfs.MiniDFSCluster.(MiniDFSCluster.java:124)
在com.myCompany.TestAll.testInit(TestAll.java:30)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于junit.framework.TestCase.runTest(TestCase.java:168)
位于junit.framework.TestCase.runBare(TestCase.java:134)
位于junit.framework.TestResult$1.protect(TestResult.java:110)
位于junit.framework.TestResult.runProtected(TestResult.java:128)
运行(TestResult.java:113)
运行(TestCase.java:124)
位于junit.framework.TestSuite.runTest(TestSuite.java:232)
运行(TestSuite.java:227)
位于org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
位于org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
有人能给我一些关于这个例外的建议吗


非常感谢。

现在发生的是hadoop正在注册一个用于监视的。hadoop第一次启动时,它会注册bean,但第二次启动时,具有该名称的bean已经注册,导致上述错误

您可能没有正确关闭MiniDFSCluster,或者多次启动它,或者MiniDFSCluster中存在导致其无法正确清理的错误


您是否正在以拆卸方法调用
cluster.shutdown()
,如图所示。

即使调用shutdown,在
是否已解决

任何人请给我一些建议?或者在其他情况下遇到过此异常。我每次都调用cluster.shutdown()。谢谢你提醒,我会再查的。