我有一个主集群和三个从集群。没有虚拟环境。它全部在网络中。 在Namenode中执行start-dfs.sh后,我看到NameNode和其中一个datanode正常启动。 但是其他两个数据节点给出了以下异常(除了日志中IP地址的更改)。三个数据节点中只有一个可以随时工作。
停止并启动集群后,我发现在任何给定时间,只有一个从机(datanode)正在运行。但是什么运行似乎是随机的。有时我有奴隶1,有时奴隶2,有时奴隶3跑。
我不清楚这里有什么问题。但是我发现无法启动的datanodoes的日志文件中出现了一个未注册的NodeException
以下是错误消息:
2014-06-26 13:00:54,866 INFO org.mortbay.log: Started SelectChannelConnector@0.0.0.0:50075
2014-06-26 13:00:54,870 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source jvm registered.
2014-06-26 13:00:54,871 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source DataNode registered.
2014-06-26 13:00:54,893 INFO org.apache.hadoop.ipc.Server: Starting SocketReader
2014-06-26 13:00:54,894 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source RpcDetailedActivityForPort50020 registered.
2014-06-26 13:00:54,894 INFO org.apache.hadoop.metrics2.impl.MetricsSourceAdapter: MBean for source RpcActivityForPort50020 registered.
2014-06-26 13:00:54,896 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: dnRegistration = DatanodeRegistration(dig14.baker:50010, storageID=DS-1161815082-172.16.30.208-50010-1403746077641, infoPort=50075, ipcPort=50020)
2014-06-26 13:00:54,906 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Finished generating blocks being written report for 1 volumes in 0 seconds
2014-06-26 13:00:54,910 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: org.apache.hadoop.ipc.RemoteException: org.apache.hadoop.hdfs.protocol.UnregisteredDatanodeException: Data node 172.16.130.214:50010 is attempting to report storage ID DS-1161815082-172.16.30.208-50010-1403746077641. Node 172.16.130.213:50010 is expected to serve this storage.
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getDatanode(FSNamesystem.java:5049)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.processBlocksBeingWrittenReport(FSNamesystem.java:3869)
at org.apache.hadoop.hdfs.server.namenode.NameNode.blocksBeingWrittenReport(NameNode.java:1109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:587)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1432)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1428)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1426)
这是我的core-site.xml
:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://dig11:10001</value>
<!-- <value>hdfs://localhost:10001</value> -->
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/scratch/USERS/sridhar/hadoop</value>
</property>
</configuration>
答案 0 :(得分:1)
一个datanode上的数据由另一个datanode呈现,namenode拒绝它。
如果它是测试环境并且您愿意丢失hdfs中的任何现有数据,则可以清理datanode目录和namenode目录并重新格式化DFS。
删除dfs.data.dir
,dfs.datanode.data.dir
。
删除dfs.name.dir
,dfs.namenode.name.dir
。
最后使用hdfs namenode -format