云服务器hadoop踩坑史:java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink

一切来源于罪恶的报错:
java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as ip:端口

心急的直接跳到文章最后

一直是照着尚硅谷的教程学的,一步步配置。奈何电脑太差,只有4核4线程,16G内存,开三台1核1线程的虚拟机简直要命。就租了三台云服务器,买云服务几百块,总比买台新电脑大几千来的划算。起初,服务器配置如下:

  • 腾讯云 轻量应用型 2核4G ----hadoop100,namenode
  • 腾讯云 云服务器 2核2G ----hadoop101,rm
  • 阿里云服务器 2核4G ----hadoop102,2nn
vim /etc/hosts

是不是网上一大堆说这么配的

本机内网IP  本机名  本机名
外机外网IP  外机名1  外机名1
外机外网IP  外机名2   外机名2

得,我也这么配。照着配完一系列配置文件,跑一个示例程序wordcount。发现卡在map 0%, reduce 0%半天,要么map 100% reduce 0%,要么map 100% reduce 100%半天。偶尔运气好跑完了,结果要十几分钟。一看logs,发现写着

java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as ip:端口

看网上,都是说什么防火墙没关。看到一堆博客下面评论,说防火墙关了还是报错,但是没人回复过。
查防火墙

systemctl status firewalld
not running

确实关了呀,ping也通,telnet也通。我是报的9866端口错,一看云服务器安全组,端口都下放了,telnet IP 9866也没问题。于是开始怀疑hadoop100是轻量应用型服务器的缘故,网卡不好,于是又租了台 腾讯云服务器,2核2G作为新的hadoop100.
配置完,发现wordcount能跑了,虽然要个几十秒—小四五分钟不等,大多时候好,少数时候坏,安慰说服自己ta已经好了。

于是继续学习

等学到了hive,建完表,一个insert into stu values(1, "yellow");
绷不住了,一直卡在map 0% reduce 0%。logs又出现了 java.io.IOException: Got error, status=ERROR, status message , ack with firstBadLink as ip:端口

找某50元调集群,运气好第一次运行出来了,和我说好了。一跑hive,炸了,他说整不出来,机器问题。我干脆直接找腾讯云售后工程师,捣鼓半天不知道哪儿毛病。又找了阿里云售后工程师,捣鼓半天也不知道哪儿毛病。

后来我一想,人家集群的服务器都是直接内网通讯的,那我要是也换内网呢?刚好有三台腾讯云的服务器,买的时候留了个心眼,都买的是地域广州的。

上官网一查,确实有这操作,轻量应用型服务器可以通过“云联网”和云服务器相连。

于是一波捣鼓,重新配置三台服务器的 /etc/hosts

内网IP1  主机名1  主机名1
内网IP2  主机名2  主机名2
内网IP3  主机名3  主机名3

发现ssh 主机名可以连接到别的机子
重新配置ssh无密连接

删除旧的keys:
rm -rf /home/用户名/.ssh

配置新keys:
ssh-keygen -t rsa
ssh-copy-id hadoop10x

然后重置hadoop集群,进入 cd $HADOOP_HOME

删除集群上所有机器上hadoop的 data logs
rm -rf data/ logs/

初始化namenode
hdfs namenode -format

然后启动集群,发现wordcount只需要短短几秒就能跑完。配置hive mysql,发现insert也变得无比丝滑。无一例外。

因此,最终的解决方案就是:

将集群上的云服务器内网互联

那些博客说配内网IP,外网IP的,我想知道你们的集群真的能正常运作嘛?当然也有可能是我菜。

如果读者有遇到配置过程中的其他问题,可以留言问我,没准我也遇到过。

你可能感兴趣的:(服务器,hadoop,java,hive)