描述:在hadoop 运行start-all.sh,发现缺少了NameNode, 缺少ResourceManager, 缺少NodeManager…等等的服务。这类问题有统一的解决方案。即查阅hadoop日志。

目录

1.hadoop日志

hadoop日志位于 hadoop 安装目录下的logs里,包含了start-all.sh命令中没有显示的重要信息,如果有报错,信息也可以在以下文件中找到。
在这里插入图片描述
由于我测试了两个host,所以在文件夹里会有两种日志,即以localhost.localdomain.log为结尾的,和以mainnode.log

2.1没有NameNode

一般来说没有node是由于没有找到是由于忘记格式化namenode,我们输入

[root@mainnode logs]# vim hadoop-root-namenode-mainnode.log +

可以查看logs日志找到如下提示。
在这里插入图片描述
Directory /opt/hadoop-3.2.1/tmp/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible.

在这句话中 /opt/hadoop-3.2.1/tmp/dfs/name是由格式化namenode产生的,所以就意味着我们没有初始化namenode。需要我们先执行如下命令

hdfs namenode -format

然后再次尝试start-all.sh

2.2没有ResourceManager和NodeManager

了解了日志之后,我们来试试使用日志来解决这个问题

vim hadoop-root-resourcemanager-localhost.localdomain.log

输入上面的命令,我们可以在resourcemanager的日志里看到如下提示,原来是缺少了一个类。
在这里插入图片描述

出现这个问题,一般来说是由于jdk版本过引起,建议使用1.7和1.8两个版本。如果你不想跟换jdk,也可以直接下载activation-1.1.1.jar到lib目录下,或者本地上传到${HADOOP_HOME}/share/hadoop/yarn/lib目录下后重新启动start-yarn.sh即可:

cd ${HADOOP_HOME}/share/hadoop/yarn/lib
wget https://repo1.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar

然后再次尝试start-all.sh

2.3没有ResourceManager

了解了日志之后,我们来试试使用日志来解决这个问题

vim hadoop-root-resourcemanager-localhost.localdomain.log

输入上面的命令,我们可以在resourcemanager的日志里看到如下提示,原来是端口被占用了,我们只需要更改以下ResourceManager的端口就好
Address already in use; For more details see: http://wiki.apache.org/hadoop/BindException
在这里插入图片描述

vim hadoop-root-resourcemanager-localhost.localdomain.log

进入yarn-site.xml 在configuration 添加如下的属性更改一个没有被使用端口即可

    <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoop:8888</value> <!-- hadoop要改为你的ip地址或hosts -->
   </property>

然后再次尝试start-all.sh

总结

面对这类hadoop启动缺少缺少进程没有提示的问题,我们需要先查阅logs找到更加精确问题原因,通过这些错误原因我们就很容易找到解决方案了。
祝大家hadoop之旅愉快。