hadoop不能互相访问和linux防火墙守护进程
前言——作为装过几次集群的菜鸟,对于hadoop集群的安装还是比较有心得的:只要配置文件够好,集群配置就非常容易,否则也容易出现莫名其妙的问题!总结了一份3台机器搭建较完好的集群的一份配置文件。
在我将集群配置文件,防火墙(自以为)、集群时间、Java环境变量等等都搞定的情况下,竟然还是出了问题。
现象是访问不了yarn的web端口。
因为我在机器上搭过好几次集群,可能存在版本不一样的情况,所以我先用bin/hadoop version查看了hadoop各个节点对应的hadoop版本,发现一样(在其它场景中,我犯过这样的错误);
jps查看Java进程是首要的测试手段,但是没发现明显异常;
然后经典操作:看日志,英语能对大佬来说可能是锦上添花,但对菜鸟来说就是落井下石,不过在logs目录下隐隐发现一个问题,yarn所在机器的logs日志没有其它2个几个节点的日志,再看里面文件里面内容并没有明显的报错信息。
然后看日志、调网络搞了一晚上最终发现了一个十分明显的问题,在非yarn机器上的机器日志里面显示一直尝试与yarn进程进行连接却一直失败,由此使用网络工具确定了是yarn所在节点自身的问题,使用curl -I查看虚拟机互相访问的情况(没有装浏览器),也是发现yarn主机能自己访问8088端口,但集群里面其它节点却访问不了改节点的8088端口,netstat -ntpl查看网络端口情况发现一切正常。耗了一段时间后,错误信息已经比较明显是yarn主机的网络问题。
是不是防火墙问题?但是在最开始就已经使用systemctl disable firewall关了linux(centos7)的防火墙,并且用systemctl status firewall查看了几遍的防火墙并且一直都显示没有这个模块。
灵机一动,根据最近学习的linux知识,linux的服务守护进程daemon基本都是以d结尾的,然而这里使用却是firewall,少了个d。但是就醍醐一般的使用systemctl status firewalld查看yarn主机的防火墙状态,结果果然是active,一抹绿色优点扎眼。
systemctl disable firewalld关闭防火墙自启动,systemctl stop firewalld关闭防火墙,然后删除集群的data和logs信息,重新bin/hadoop namenode -format格式化namenode,重启集群,再jps看集群状态,windows浏览器访问yarn的8088端口,终于一切正常了。
1这次出错集群的访问状态很多地方都有较明显的问题,但是因为没经验所以get不到重点,所以空耗了许久。防火墙问题主要还是linux操作不规范和不熟悉,结果导致了一直以为自己执行正确的代码关闭了防火墙,最开始手熟使用firewalld,执行正确,结果反而让自己觉得firewall(错觉)也是正确的,机器尚且可能硬件出错,更何况人呢。执行复杂操作时(集群统一执行某操作)自动化脚本时第一选择,当然脚本因为权限、环境变量等问题也有可能发生问题,不过也还有测试自动化脚本。
本次错误应该是在三台机器关闭防火墙,第一次成功了,但第二、三次却失败了,但因为对linux操作不熟悉,以为是成功了。这种疲劳错误,应该多使用脚本避免人的疲劳误差。
总结:以上记载个人犯错过程,以下对hadoop及linux做一些总结:
1、hadoop集群出错,首要检测手段jps查看Java的进程,注意是否有异常,如果有应该多加关注。缺点:对于某些问题Java进程不会及时体现出来,所以这个操作应该要经常使用,在大规模集群里面肯定要使用自动化脚本进行相应管理,在大数据方面有进阶的zookeeper框架可以管理整个集群。
2、根据jps结果、bug的具体现象分析,bug是哪个类型的,如网络问题、配置问题、硬件问题(HA解决)等。
3、配置问题:查看集群的所有配置是否一致,hadoop框架本身的版本、hadoop及linux网络的配置文件、集群时间、namenode与datanode生成的版本信息是否一致、data与logs文件是否有隐藏的一些问题等。
4、网络问题:
4.1、windows主机网络是否与虚拟机网络相连,可以使用ping命令,这个比较基础,但也不得不查。
4.2、对于服务器(没有浏览器)web端口进行访问,可以使用curl -I测试8088端口;ping命令不能测试端口,可以使用端口对应的工具(比如ssh登陆对应22号),或者使用专业的端口扫描工具进行测试。
4.3、关闭防火墙,centos7 systemctl disable firewalld关闭防火墙,centos7使用systemctl工具进行管理,其它linux版本应该使用对应的管理工具关闭防火墙。
4.4、使用netstat -nptl查看linux系统的端口信息,ip:端口,监听ip上面的端口;0.0.0.0ipv4,::::ipv6,监听本机所有ip的端口;需要开放的端口注意不要监听127.0.0.1,监听了loopback本地环回地址,则只能本地访问。
5、硬件问题:集群HA可以用secondarynamenode复制元数据实现大部分(会丢失数据);主备模式则可以根据安全需求增加集群的安全性,代价是数据冗余大。