搭建Hadoop集群的时候,
![c16c0e95b8c77c540ae926b2d1c201f4.png](https://i-blog.csdnimg.cn/blog_migrate/ed0b1d6483aea4f9e3123f9357542110.jpeg)
运行命令:
hdfs namenode -format
格式化namenode,因为某种原因我进行了两次格式化namenode,这样做的后果是接下来我在用命令:
start-dfs.sh
来启动hdfs时,jps发现datanode先是启动了一下,然后就挂掉了,在http://192.168.59.101:50070 (HDFS管理界面)也看不到datanode的信息。
![90e6c694bc55198fabef0b0b0b6242d4.png](https://i-blog.csdnimg.cn/blog_migrate/399abc0d2c160bbceb860c7e02394b7f.jpeg)
![9b1566bebca2f03f820e049f88fdf4c3.png](https://i-blog.csdnimg.cn/blog_migrate/0509bd67457d2f4dc3470edf8a4e864c.png)
下图是具体的日志信息:
![9cb44af3dfe2cc72ddc1e4f95e5c4460.png](https://i-blog.csdnimg.cn/blog_migrate/1f32c2b1b09ebda372667d5da8d5a299.jpeg)
综合我在网上搜到的各种回答,确定无疑这是因为我二次格式化namenode所导致的:
hadoop的升级功能需要datanode在它的版本文件里存储一个永久性的clusterID,当datanode启动时会检查并匹配namenode的版本文件里的clusterID,如果两者不匹配,就会出现"Incompatible clusterIDs"的异常。
每次格式化namenode都会生成一个新的clusterID, 如果只格式化了namenode,没有格式化此datanode, 就会出现”java.io.IOException: Incompatible namespaceIDs“异常。
所以现在的问题就是更改这个datanode的clusterID就OK:
根据日志报错信息(注意上图中红框部分):
2019-09-14 23:06:37,591 WARN org.apache.hadoop.hdfs.server.common.Storage: java.io.IOException:
Incompatible clusterIDs in /opt/hadoop/dfs/data: namenode clusterID = CID-b2fc3970-51f5-44e8-a092-03bad04e640e;
datanode clusterID = CID-db031ca7-c510-4b16-a6af-af32cd5a482a
进入/opt/hadoop/dfs/data该目录下:
![f18c4d979072cb43cd78e3a2347543ca.png](https://i-blog.csdnimg.cn/blog_migrate/a4b71ae3e72b18f2e64c844fc4935993.jpeg)
![4f8af417c238434369a1a7504bdef924.png](https://i-blog.csdnimg.cn/blog_migrate/3a4c0feae3bb442f4814e926631af9d7.jpeg)
三个datanode节点都这样更改后,重启:即可成功启动datanode
![17f161cbd84d6f29c01f5912735a26b3.png](https://i-blog.csdnimg.cn/blog_migrate/90075ff465668afbb3f71d517ff1d9e0.jpeg)
http://192.168.59.101:50070/dfshealth.html#tab-datanode
![a25e20a34290f11ad2e9461a8c885c7a.png](https://i-blog.csdnimg.cn/blog_migrate/0f160cfa01a0f889cafaf8403ba88ec0.jpeg)