上周五终于完成了第一次数据挖掘大作业的答辩,周末又去参加了蓝桥杯,一直没有时间整理遇到的问题,直到今天才闲下来。尽量把遇到的问题都能记录下来,日后便于自己回看。主要分三个部分:Centos7的基本配置、Hadoop+Spark的配置、K-Means算法的实现。
一、Centos7的基本配置
1、不能连接上外网
解决方法:最便捷的方法是把虚拟机的ip地址改为动态ip,再把连接方式改成桥接。具体做法是
vim /etc/sysconfig/network-scripts/ifcfg-ens33。打开网络配置之后,设置BOOTPROTO:dhcp,增加如下内如:DNS1=8.8.8.8 DNS2=114.114.114.114
2、不同虚拟机之间不能互ping,也就无法实现完全分布式集群
这个问题困扰了很久,网上的方法都试了一遍,结果还是不行,最后才发现了问题所在,是本地网卡那设置了共享网络,即虚拟机的ip地址优先使用物理机的ip地址,导致无法ping通。下面说一下如何将多台虚拟机连接成一个局域网。
解决方法 (1)、wifi法:用master主机发射wifi,360wifi和猎豹wifi都可以,然后各台节点都连进这个wifi里,在其中一台(非master主机)物理主机上查看自己主机的ip地址,假如ip地址为:192.168.191.2,网关地址为:192.168.191.1,接下来就进入这台物理机的虚拟机中,用vim /etc/sysconfig/network-scripts/ifcfg-ens33打开网络配置,添加如下内如: IPADDR=192.168.191.3、NETMASK=255.255.225.225、GATEWAY=192.168.191.1 然后保存退出。其他节点也是一样配置,IPADDR和192.168.191.2在同一个网段就可以了,GATEWAY是固定的192.168.191.1 。重启网络服务:service network restart 看到OK字样后,就可以ping其他主机。
(2)、路由器法:把master和其他节点用网线连进同一个物理机。接下来的流程和wifi法是一样的。
其实我认为只要把集群的机子连进同一个wifi就算是在同一个局域网中,然后修改虚拟机的ip地址,将其设置为与物理主机的ip地址在同一个网段即可,但我们并没有成功,所以还是推荐上述两种方法。
二、Hadoop+Spark的配置
1、多次格式化namenode造成的问题
我在集群搭建的时候,因为操作不当,曾经多次格式化Namenode,然后启动的时候就会报错:ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException:Incompatible namespaceIDsin/home/gqy/hadoop/data: namenode namespaceID = 155319143; datanode namespaceID = 1036135033
这个异常的意思是datanode与namenode之间的clusterID和namesp