2012-01-19 20 views
7

Tôi đang sử dụng MiniDFSCluster để thực hiện các kiểm tra junit. Bây giờ tôi chỉ bắt đầu và đóng cụm, junit chạy màu xanh lá cây. Nhưng tôi nhận ngoại lệ này:javax.management.InstanceAlreadyExistsException khi sử dụng 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) 

Có ai vui lòng cho tôi một số gợi ý về ngoại lệ này không?

Cảm ơn bạn rất nhiều.

+0

Bất cứ ai xin vui lòng cho tôi một số gợi ý? Hoặc đã từng gặp ngoại lệ này với một số thứ khác. –

Trả lời

5

Điều đang xảy ra là hadoop đang đăng ký jmx bean để theo dõi. Lần đầu tiên bắt đầu, nó đăng ký bean, nhưng lần khởi đầu thứ hai, một bean có tên đó đã được đăng ký, dẫn đến lỗi ở trên.

Hoặc bạn không tắt MiniDFSCluster đúng cách, hoặc bạn đang khởi động nó nhiều lần, hoặc có lỗi trong MiniDFSCluster khiến nó không dọn dẹp đúng cách.

Bạn có đang gọi cluster.shutdown() bằng phương pháp ngăn nước mắt không, như được minh họa here.

+0

Tôi gọi cluster.shutdown() mọi lúc. Cảm ơn bạn đã nhắc nhở, tôi sẽ kiểm tra lại. –

Các vấn đề liên quan