实验环境
VMware15;Ubuntu16.04;hadoop2.7
问题描述
使用命令start-dfs.sh
启动hadoop2.7遇到datanode未启动成功。在确保各项配置(如:java 环境变量)配置正确的情况下,我们可以通过启动时的提示去查看日志信息 。
-
提示:
启动时会提示形如 “DBLab-XMU: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.out”,其中 DBLab-XMU 对应你的机器名,但其实启动日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-DBLab-XMU.log 中,所以应该查看这个后缀为 .log 的文件; -
一些建议
每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,对比下记录的时间就知道了。一般出错的提示在最后面,通常是写着 Fatal、Error、Warning 或者 Java Exception 的地方。 在vim一般模式下可以通过/
去快速查找错误。 -
日志信息
问题分析
- 出现该问题的原因
在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format),这时namenode的clusterID会重新生成,而datanode的clusterID 保持不变。
每次namenode format会重新创建一个namenodeId,而data目录包含了上次format时的id,namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空data下的所有目录.
解决办法
这里笔者用的是法二。
法一
停掉集群,删除问题节点的data目录下的所有内容。即hdfs-site.xml文件中配置的dfs.data.dir目录(我的目录:/usr/local/hadoop/dfs/data/current)。重新格式化namenode。
法二
先停掉集群,然后将datanode节点目录/dfs/data/current/VERSION中的修改为与namenode一致即可。
其实只需要把 data/current/VERSION
中的clusterID 改为和 name/current/VERSION
中的clusterID一致。
之后我们重新启动集群,通过 jps
命令查看:
(base) hadoop@ubuntu:/usr/local/hadoop/logs$ jps
9668 SparkSubmit
13093 Jps
12983 SecondaryNameNode
12649 NameNode
12798 DataNode
此时,我们便可在本地与hdfs文件系统进行交互了,在浏览器中查看:
欢迎关注我的微信公众号,谈风月之余谈技术