Bug
start-all.sh
启动hadoop集群后发现没有名称节点 NameNode
分析
这种情况通常都是检查hadoop运行的日志,在那之前需要先排除最容易忽视的点。
1. 检查 workers配置文件
使用jps
命令先查看其他的节点进程的情况,我这里发现其他节点只有Jps一个进程
重新配置 hadoop目录下的workers vim ./etc/hadoop/workers
,将所有的工作节点主机名放入,比如:
hadoop101
hadoop102
hadoop103
先在其中一个节点,比如 hadoop101 节点修改 ,之后在通过scp命令传送到其他节点
scp /usr/local/hadoop/etc/hadoop/workers root@hadoop102:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/workers root@hadoop103:/usr/local/hadoop/etc/hadoop/
接着在主节点hadoop101 重新 初始化名称节点 $HADOOP_HOME/bin/hdfs namenode -format
重新开启集群 $HADOOP_HOME/sbin/start-all.sh
依旧报错
jps后依然没有NameNode节点
若暂时没有解决NameNode节点问题,记得先关闭集群.
2. 解决启动集群时提示mkdir权限不够
此时应当是hadoop101对其他节点的hadoop目录权限不足,这时需要在其他的节点修改hadoop的权限
sudo chown -R uni:uni ./hadoop
启动集群后
成功解决 权限不够的问题 但是依然没有 NameNode
3. 查询hadoop启动NameNode运行日志 解决 Directory /usr/local/hadoop/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible
cd ./logs
进入日志目录,先 ls
查看一下有关namenode的日志文件
比如笔者这里是 cat hadoop-uni-namenode-hadoop101.log
查到的异常如下
Directory /usr/local/hadoop/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.
导致原因:很有可能是多次初始化名称节点,导致名称节点的映射发生变化
解决措施: 删除 hadoop目录下的 tmp文件夹后重新启动集群
如果还是没有用,建议检查与hdfs相关的配置文件core-site.xml
和 hdfs-site.xml
,最后我发现是自己的 hdfs-site配置文件没配置... 有点难受
ps : 修改完一个节点的配置文件后,记得使用scp命令传到其他节点哟