先给大家来一个亲测可用的hadoop3.2.0下载地址,直接shell:
wget http://mirrors.hust.edu.cn/apache/hadoop/core/stable/hadoop-3.2.0.tar.gz
写一些我在安装hadoop时碰到的一些问题。
1.启动hadoop报找不到jdk error。但是我也忘了jdk安装在哪里,查找资料后用whereis java
命令得到超链接,cd超链接后得到最终地址,vi hadoop.env.sh
后export JAVA_HOME="jdk路径"
解决问题。
2.启动namenode和datanode时报没有权限 error。发现问题出现在没有加密钥上,找官网代码重新搞一遍:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
解决这个问题了。
3.启动namenode和datanode时报一个奇怪(没有及时记下来,好像是提示root用户啥的)的error,启动失败。查询资料知还需要配置四个文件 start-yarn.sh、stop-yarn.sh、start-dfs.sh、stop-dfs.sh 。
start-yarn.sh、stop-yarn.sh:
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
start-dfs.sh、stop-dfs.sh
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
重新启动start-all.sh解决问题。jps一下:
PS:之前有出现过一个问题,就是DataNode无法正常启动,但是运行界面又没有报错,很奇怪,然后查询了运行日志,发现这段有问题:
2019-10-07 15:19:10,280 WARN org.apache.hadoop.hdfs.server.common.Storage: Failed to add storage directory [DISK]file:/home/leesf/program/hadoop/tmp/dfs/data
java.io.IOException: Incompatible clusterIDs in /home/leesf/program/hadoop/tmp/dfs/data: namenode clusterID = CID-56c18e53-1056-45eb-ae1f-773c146463cb; datanode clusterID = CID-34706444-8335-4222-8e5e-3dcca001970d
查了一下资料,发现是多次格式化后ID不匹配,解决方法就是去/home/leesf/program/hadoop/tmp/dfs/data/current/VERSION(具体路径看log显示)
文件里把相应的ID改成一致的就可以了,重启服务可以正常运行。
至此,所有进程算是运行成功了。
4.在舍友安装hadoop过程中还出现了starting namenode时没有报错但是进程启动失败的问题。刚开始查阅资料得到是因为端口被占用应该是xml配置出现问题,但查了半天的配置文件,发现没出现问题,最后发现问题出在hdfs没有格式化,bin/hdfs namenode -format
后解决这个问题。
5.小插曲:在执行start-all.sh
时,如果在/hadoop/hadoop-3.2.0/sbin# 目录下执行start-all.sh提示找不到命令,而在/hadoop/hadoop-3.2.0#目录下执行sbin/start-all.sh
可以正常运行。
.6.我用的是阿里云服务器,在配置过程中出现无法查看Web UI的问题。刚开始一直没办法解决,访问http://localhost:50070提示找不到网页,后来查询到hadoop3.2.0版本改到9870端口,访问还是找不到网页。这个问题搁置了很久,在完成全部其他配置后我才开始着手解决这个问题。在查阅资料的过程中我突然意识到,我用的是阿里云服务器,所以我去搜了一下,用http://阿里云公网IP:9870可以访问,但尝试后发现还是不行。通过查阅资料得知,要在阿里云服务器那边添加安全组的入口规则允许9870端口访问,保存并重启。然后我发现之前在配置hdfs-site.xml时没有配置dfs.namenode.http-address这一项,于是要添加下面的这几行代码(在原有的基础上添加)::
<property>
<name>dfs.namenode.http-address</name>
<value>0.0.0.0:9870</value>
</property>
然后重新格式化hdfs:bin/hdfs namenode -format
重启所有服务:sbin/start-all.sh
查阅资料时得知,端口可能被占用,所以查找命令后执行
这下应该可以正常访问了吧,我想。但是我在继续访问9870端口时又出现一个问题:
不过不是什么大问题,换成Microsoft Edge浏览器访问轻松解决了这个问题,下图为正常访问: