在启动Hadoop集群时,每每会出现这样或那样的问题,好比节点中DataNode进程启动不了,非常让人头疼,下面说下具体的解决办法(复杂版),简单版见最后:node
(1)中止关于Hadoop的全部进程oop
(2)删除每一个节点Hadoop目录下 logs 和 tmp 文件夹,命令以下:ui
sudo rm -rf logs sudo rm -rf tmp
(3)手动从新建立每一个节点下 logs 和 tmp 文件夹,命令以下:spa
mkdir logs mkdir tmp
(4)cd到Hadoop/bin目录下,从新格式化:scala
hdfs namenode -format
没有问题后,从新启动hadoop集群,DataNode进程成功启动。code
具体的缘由仍是:orm
datanode的clusterID 和 namenode的clusterID 不匹配进程
成功启动DataNode进程后,咱们能够查看各节点tmp目录下文件。hadoop
做为namenode节点,其文件目录为:hadoop/tmp/dfs/name/current;io
做为datanode节点,其文件目录为:hadoop/tmp/dfs/data/current;
在目录下咱们使用 cat 命令查看 VERSION 文件,分别为:
[hadoop@slave01 current]$ cat VERSION #Mon Jun 25 10:15:16 CST 2018 namespaceID=2112363039 clusterID=CID-5a83590f-0667-49f7-a7ee-c27165216e28 cTime=0 storageType=NAME_NODE blockpoolID=BP-1317085386-127.0.0.1-1529892916541 layoutVersion=-63
[hadoop@slave02 current]$ cat VERSION #Mon Jun 25 10:16:52 CST 2018 storageID=DS-554910b7-5a75-4a41-a7c2-4f9d137dfd9d clusterID=CID-5a83590f-0667-49f7-a7ee-c27165216e28 cTime=0 datanodeUuid=3cdb4500-3548-471e-86bc-7daea441fb26 storageType=DATA_NODE layoutVersion=-56
能够看出:namenode和datanode的clusterID是一致的。
因此,从新格式化的操做不要随便使用,这可能致使两个clusterID不一致,引发进程启动不了的问题,网上也有说不用从新格式化和删除目录,而是经过将namenode下的clusterID复制到datanode下的clusterID,覆盖掉原来的,让两个保持一致,这种方式没试过,不知道好使很差使,你们能够尝试下(该方式已被证明,亲测可用哦)。