天天看点

Hadoop启动时datanode启动失败1. Incompatible clusterIDs2. 解决了上述问题后又出现了新问题3. 暴力解决datanode无法启动的问题

1. Incompatible clusterIDs

hadoop的data-node在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。

  每次格式化namenode都会生成一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。

  参见官方CCR[HDFS-107]

这就解释了,为什么第一次是成功的,后面一直都datanode挂掉的情况。

因为第一次成功后,每次再跑hdfs之前我都格式化或者说初始化了hdfs的配置。然后,namenode的clusterId就会清空,在你跑start-dfs.sh的时候,就会重新生成一个clusterId。但你datanode没有初始化噢,就是说datanode里面的那个clusterId还是之前那个,于是就出现了两者不匹配,报错了。

解决办法将 /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current 中的VERSION 和 /opt/module/hadoop-2.7.2/data/tmp/dfs/name/current中的VERSIONh中的clusterId改为一样的。

2. 解决了上述问题后又出现了新问题

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.UnregisteredNodeException): Data node DatanodeRegistration(192.168.1.104:50010, datanodeUuid=c588cc9a-4d7b-407f-a1d1-e68887d758d1, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-56;cid=CID-e7fdb49e-2ade-4e83-8924-25a408e5ad9e;nsid=1920353591;c=0) is attempting to report storage ID c588cc9a-4d7b-407f-a1d1-e68887d758d1. Node 192.168.1.103:50010 is expected to serve this storage.
	at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.getDatanode(DatanodeManager.java:495)
	at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.processReport(BlockManager.java:1788)
	at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.blockReport(NameNodeRpcServer.java:1321)
	at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.blockReport(DatanodeProtocolServerSideTranslatorPB.java:171)
	at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28756)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)
	at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:969)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2049)
	at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2045)
	at java.security.AccessController.doPrivileged(Native Method)
	at javax.security.auth.Subject.doAs(Subject.java:422)
	at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
	at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2043)

	at org.apache.hadoop.ipc.Client.call(Client.java:1475)
	at org.apache.hadoop.ipc.Client.call(Client.java:1412)
	at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)
	at com.sun.proxy.$Proxy14.blockReport(Unknown Source)
	at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB.blockReport(DatanodeProtocolClientSideTranslatorPB.java:203)
	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.blockReport(BPServiceActor.java:463)
	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.offerService(BPServiceActor.java:688)
	at org.apache.hadoop.hdfs.server.datanode.BPServiceActor.run(BPServiceActor.java:824)
	at java.lang.Thread.run(Thread.java:748)
           

问题1和2都是id不匹配的问题,解决办法

3. 暴力解决datanode无法启动的问题

  • 删除data文件夹下的所有文件 rm -rf *
  • 删除logs文件夹下的所有文件 rm -rf *
  • 格式化 namenode hdfs namenode -format
  • 重新启动 start-dfs.sh

    start-yarn.sh

继续阅读