只有三分之一的数据节点在Hadoop中启动?

时间:2014-06-26 20:13:24

标签: hadoop mapreduce hdfs

我有一个主集群和三个从集群。没有虚拟环境。它全部在网络中。 在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>

1 个答案:

答案 0 :(得分:1)

一个datanode上的数据由另一个datanode呈现,namenode拒绝它。

如果它是测试环境并且您愿意丢失hdfs中的任何现有数据,则可以清理datanode目录和namenode目录并重新格式化DFS。

删除dfs.data.dirdfs.datanode.data.dir

中的所有现有数据

删除dfs.name.dirdfs.namenode.name.dir

中的所有现有数据

最后使用hdfs namenode -format

重新格式化DFS