一、背景
今天給客戶的阿里云平臺搭建Hadoop HA集群時(shí),出現(xiàn)以下情況:
- 通過
hdfs haadmin -getServiceState nn1和hdfs haadmin -getServiceState nn2命令查看,發(fā)現(xiàn)兩個NameNode的狀態(tài)都是standby - 通過
hdfs dfsadmin -report命令查看,發(fā)現(xiàn)HDFS數(shù)據(jù)均為0
- 查看日志發(fā)現(xiàn):
org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /home/input/file1.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1). There are 2 datanode(s) running and no node(s) are excluded in this operation.
二、錯誤原因
???????當(dāng)首次執(zhí)行命令
hadoop namenode -format格式化NameNode時(shí),會在dfs.namenode.name.dir對應(yīng)路徑下生成current/VERSION文件,其中記錄了clusterID,同時(shí)dfs.datanode.data.dir對應(yīng)的DataNode目錄中也會生成current/VERSION文件,其中clustreID的與NameNode中clusterID的值相同。
???????當(dāng)再次執(zhí)行hadoop namenode -format命令時(shí),NameNode對應(yīng)的目錄下會重新生成clusterID,導(dǎo)致和DataNode對應(yīng)的clusterID不一致,從而造成上述問題。

三、解決方案
方案一:
- 關(guān)掉集群
./stop-dfs.sh
- 刪掉各個節(jié)點(diǎn)上DataNode對應(yīng)的目錄
rm -rf data
- 格式化NameNode
hadoop namenode -format
- 重啟集群
./start-dfs.sh
方案二:
- 關(guān)掉集群
./stop-dfs.sh
- 編輯clusterID使Namenode和DataNode同步
vim clusterID
- 重啟集群
./start-dfs.sh
注意:
在生產(chǎn)環(huán)境中,謹(jǐn)慎使用hadoop namenode -format命令。以上操作是在首次搭建集群且沒有重要數(shù)據(jù)的情況下執(zhí)行的。
