启动Hadoop一段时间后,其中一个机器上的DataNode消失,查看日志发现
2016-10-12 01:04:12,856 WARN org.apache.hadoop.metrics2.util.MBeans: Hadoop:service=DataNode,name=FSDatasetState-DS-498785482-127.0.1.1-50010-1475998532523
javax.management.InstanceNotFoundException: Hadoop:service=DataNode,name=FSDatasetState-DS-498785482-127.0.1.1-50010-1475998532523
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1094)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.exclusiveUnregisterMBean(DefaultMBeanServerInterceptor.java:415)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.unregisterMBean(DefaultMBeanServerInterceptor.java:403)
at com.sun.jmx.mbeanserver.JmxMBeanServer.unregisterMBean(JmxMBeanServer.java:507)
at org.apache.hadoop.metrics2.util.MBeans.unregister(MBeans.java:71)
at org.apache.hadoop.hdfs.server.datanode.FSDataset.shutdown(FSDataset.java:2093)
at org.apache.hadoop.hdfs.server.datanode.DataNode.shutdown(DataNode.java:917)
at org.apache.hadoop.hdfs.server.datanode.DataNode.run(DataNode.java:1601)
此异常是因为,两台DataNode的storageID出现了冲突,因为我的Hadoop是从一个搭建好的DateNode上直接复制过来的,所以storageID会一样。
解决方法:
1,直接将出现异常的那台slaves机器的data目录删除,Hadoop有备份数据,将数据恢复可同步
2,这个时候,我们需要修改指定的datanode的current文件中的相应storageID的值,进入/hadoop-1.2.1/tmp/dfs/data/current,进入VERSION
将其中的storageID更改一下,将末尾数字随便改动一下,只要不和其他DataNode的storageID一样即可