自己搭建的集群,啟動hadoop 集群是,發現slave節點的datanode沒有啟動,查了資料發現是因為我在啟動集群前,執行了這個命令:
hadoop namenode -format
這個指令會重新格式化namenode的信息,這樣可能會導致master節點的VERSION信息跟datanode的信息對不上,導致指令無法同步。
查看VERION信息:
master 的 namenode 信息:
> cd /usr/local/src/hadoop-2.6.1/dfs/name/current
> cat VERSION
#Tue Aug 18 01:43:38 EDT 2020
namespaceID=1008709700
clusterID=CID-c3345186-922b-4010-bb38-cdc135bc1afe
cTime=0
storageType=NAME_NODE
blockpoolID=BP-266453957-192.168.56.10-1597729418207
layoutVersion=-60
slave 的 datanode信息
> cd /usr/local/src/hadoop-2.6.1/dfs/data/current
> cat VERSION
#Sat Aug 24 04:47:43 EDT 2019
storageID=DS-40ea875f-c037-49d3-b6e9-da8e9ff1d4eb
clusterID=CID-adbba37c-a4d3-4b60-8d1b-3ac22ee863df
cTime=0
datanodeUuid=d7f1a2f9-4604-4bf1-a1c7-90d553fb62b8
storageType=DATA_NODE
layoutVersion=-56
可以看到,namenode 和 datanode 的 clusterID 不一樣,可以認為兩者所在的集群是一樣的。
這時有一個解決辦法,在我這個場景下測試過有效:
第一步:停止集群:
> ./hadoop-2.6.1/sbin/stop-all.sh
第二步:刪除logs文件夾和tmp文件夾
> rm -rf /hadoop-2.6.1/logs
> rm -rf /hadoop-2.6.1/tmp
第三步:查看VERSION文件是否存在,如果存在的話,把它刪除:
> cd /hadoop-2.6.1/dfs/name/current
> ls -l
如果有VERSION文件,直接刪除:
> rm -f VERSION
第四步:所有slave節點刪除VERSION文件
> cd /usr/local/src/hadoop-2.6.1/dfs/data/current
> rm -f VERSION
第五步:格式化namenode
> namenode -format
這一步如果不執行的話,直接啟動集群會導致master節點沒有namenode
第六步:啟動集群
> ./hadoop-2.6.1/sbin/start-all.sh
第七步:查看是否各個進程都啟起來了:
master:
> jps
16595 Jps
16216 RunJar
15595 NameNode
15917 ResourceManager
slave :
> jps
8369 NodeManager
8492 Jps
8271 DataNode
第8步,查看master和slave節點的VERSION
master:
> cat VERSION
#Tue Aug 18 01:59:54 EDT 2020
namespaceID=2000705856
clusterID=CID-5e8393c4-8eec-4f49-8be2-5935c1e215d7
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1566447260-192.168.56.10-1597730394165
layoutVersion=-60
> cat VERSION
#Tue Aug 18 02:01:23 EDT 2020
storageID=DS-d47a197e-c210-4dac-bc78-dfd1c4338bb2
clusterID=CID-5e8393c4-8eec-4f49-8be2-5935c1e215d7
cTime=0
datanodeUuid=1c8cea38-f6ad-415b-bf53-8e47bd7bacf8
storageType=DATA_NODE
layoutVersion=-56
這樣就可以了
