Spark Yarn集群的搭建,也不算纯原创,借鉴了网上的各种前辈的资料,在此做一次总结,主要参考了http://www.chinacloud.cn/show.aspx?id=23371&cid=12。
环境: Vmware搭建的2个Centos虚拟机. master虚拟机地址为192.168.64.131, slave为192.168.64.133 (最好设置静态ip, 否则重启可能会变,那么hosts配置要频繁修改了)
软件: hadoop2.7.3, Spark2.1.0, JDK1.8.0_111, sbt 0.13.13, scala 2.11.8
总结下来有以下几个大步骤:
1. 配置两台虚拟机ssh免密码互通
2. Java, Hadoop, Spark, Scala的安装
3. 配置hadoop,yarn,spark
4. 编写spark应用,打包并用spark-submit提交
详细请参考http://www.chinacloud.cn/show.aspx?id=23371&cid=12,非常详细的文章
这里我另外总结几个坑:
1. 当提交spark应用时一直提示token过时,如This token is expired.... 最后查出来是两台虚拟机没有时钟同步。网上介绍同步的文章很多,最简单的是挂起虚拟机,修改虚拟机配置文件.vmx,将tools.synctime改为true那样虚拟机就跟宿主机时间同步了。
2. 在启动hadoop的时候slave无法跟master通信,一直提示Problem connect to wj/192.168.64.131。
用netstat -an | grep 9000 显示主机监听了192.168.64.131:9000端口。
但是就是无法接收到心跳。最终发现原因是虚拟机的防火墙屏蔽了slave的心跳信息。 解决方法:sudo /etc/init.d/iptables stop关掉防火墙,我两台虚拟机都关了,最终问题解决
3. 其他疑难杂症,我都是重置hadoop namenode。具体做法是删掉hadoop文件夹下的dfs, tmp, logs文件夹,然后执行bin/hadoop namenode -format,两台虚拟机都最好做一遍。然后重启namenode,yarn
最后hadoop的web监控如下:
最后自己编写的SparkTest应用失败了,但是SparkPi例子成功了,个人怀疑是我的spark应用写的不好,需要读本地文件形成RDD,具体原因需要进一步分析。