一、问题描述
使用如下方法启动成功hadoop服务
进入相应文件夹
cd /usr/local/hadoop/
首先停止启动所有的节点,使用命令行启动stop-all.sh脚本
./sbin/stop-all.sh
解决方法是首先停止启动所有的节点,使用命令行启动stop-all.sh脚本:
./sbin/start-all.sh
使用jps
命令查看当前hadoop运行
貌似没问题
其实这里就是有问题!!!后续解决方法里面说
继续打开http://localhost:9870
,查看web界面
显示无法连接到
二、解决方法和问题分析
下面两个方法是在网上搜到的,大家可以先试试
-
1.有博主建议查看防火墙的
输入命令发现我的Linux并没有防火墙。。。所以不可能是防火墙问题
详见:Ubuntu - 查看、开启、关闭和永久关闭防火墙 -
2.也有博主建议 编辑配置文件
hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/usr/local/hadoop/tmp/dfs/data</value> </property> <property> <name>dfs.namenode.http-address</name> <value>0.0.0.0:9870</value> </property> </configuration>
这些都有尝试 但是仍没有解决
最后我重新看了一下我部署伪分布式Hadoop的那篇博客:Hadoop安装搭建伪分布式教程(全面)吐血整理发现我前面启动节点时确实有问题!!!
PS:其实至少需要4个进程:
Namenode、DataNode、SecondaryNameNOde、JPS
再会看我之前的那个命令,居然连NameNode
都没有!!!我们知道http://localhost:9870
就是来查看主节点情况的,居然连主节点NameNode
都没有,当然会连不上呀~~
那么现在的思路就变成了:如何启动主节点NameNode
(其实还有另外两个进程:NodeManager
和ResourceManager
没有启动成功,这也和影响我们通过web界面对其资源管理器的查看等有影响,稍后我们一起说)
2.1:缺少NameNode进程
核心:初始化namenode。需要我们先执行如下命令
hdfs namenode -format
然后再启动hadoop服务(注意,再次启动前需要先停止之前启动的,否则会报错)
然后如下:
之后我们再次访问http://localhost:9870
即可成功访问!🎆
2.1:没有ResourceManager和NodeManager
原因:只使用了start-dfs.sh
命令(这个命令只会启动上述四个进程)
应该使用:命令start-all.sh
(该命令是start-dfs.sh与start-yarn.sh这两个命令的合并)
这样才会启动6个进程:
补充:启动Hadoop时提示 start-all.sh(该命令是start-dfs.sh与start-yarn.sh这两个命令的合并):找不到命令 的解决方法:
这个问题出现的原因是环境变量没有配置好
参考这篇博客的3.3.2
步配置好环境变量:Hadoop安装搭建伪分布式教程(全面)吐血整理
于是我们可以成功访问hadoop的http://localhost:8088
资源管理界面:
2.3:hadoop拒绝history通过19888端口连接查看已完成的job的日志
原因在于:通过start-all.sh启动hadoop各项节点后,historyserver并没有启动,需要手动启动,因此可以通过以下命令来手动启动historyserver,关闭命令也给出.
启动命令:
mr-jobhistory-daemon.sh start historyserver
关闭命令:
mr-jobhistory-daemon.sh stop historyserver
可能会出现下面两个警告,没有关系
再次访问: