异常现象描述:
hadoop格式化后,我们需要启动hdfs。然而,有些时候启动hdfs并不是那么顺利,往往会出现DataNode未启动的现象。
启动hdfs后,执行jps命令查看,结果如下:
很显然,DataNode没有出现。作为存储数据的节点进程没有运行,肯定是有问题的。
网上的很多说法,给出的原因解释是:
当我们使用hadoop namenode -format格式化namenode时,会在namenode数据文件夹(这个文件夹为自己配置文件中dfs.name.dir的路径)中保存一个current/VERSION文件,记录clusterID,datanode中保存的current/VERSION文件中的clustreID的值是上一次格式化保存的clusterID,这样,datanode和namenode之间的ID不一致。
进入current文件夹后,发现完全不是这回事 ,这个clusterID根本就没法手动修改。(写这种博客的人根本没有实践过,完全是从别的地方拷贝过来的,为了写博客而写博客)
处理过程:
尝试了一种做法:
进入相应文件夹,删除hadoop格式化后生成的dfs文件夹,重新格式化,再次执行./start-dfs.sh后,仍然是上面的结果, DataNode 没有启动。
尝试过的第二种方法:
执行./stop-dfs.sh后,关闭hdfs,重新启动,结果跟上面一样,仍然是DataNode 没有启动。
再三折腾,删除掉存放数据的临时文件tmp,重新格式化Hadoop,格式化成功。
查看日志,发现有个明显的报错日志:
ssh: Could not resolve hostname localhost: nodename nor servname provided, or not known
看来跟本地host的配置有点关系。
执行 vi /etc/hosts:
127.0.0.1 hadoop000
手动添加一行 127.0.0.1 localhost
执行./hadoop namenode -format,重新格式化hadoop,格式化成功。
进入hadoop的sbin脚本目录,执行:./start-dfs.sh
结果如下:
NameNode和DataNode都已经正常启动了。
小结:
搭建环境是一件很费力但不一定有结果的事情,出现异常也在所难免。这个时候,需要冷静下来,查资料,想办法尝试解决。一旦发现网上给出的方案仍然没法解决,就要尝试新的办法。总之一点,就是要好事多磨。