描述:在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之旅愉快。