spark官网已经针对hadoop的2.4+版本、2.3版本、1.x版本等提供了编译好的安装包。在某些情况下,需要自己编译spark。用maven编译的方法是:
1. 安装好maven,下载和解压源码
2. 设置环境变量
在linux下运行:
export MAVEN_OPTS="-Xmx2g-XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"
不这么做的话,编译过程中maven会报PermGen space不够的异常
3. 使用脚本编译
直接使用源代码包中的make-distribution.sh脚本可以完成编译、打包工作,建议直接使用这个脚本,运行命令如下:
./make-distribution.sh --tgz-Phadoop-2.2 -Pyarn -DskipTests -Dhadoop.version=2.2.0 –Phive
--tgz指明要打成tar.gz包、-P选项是针对Maven的pom.xml激活其profile配置、-D选项是针对Maven的pom.xml设置property。各个profile和property的设置,可以查看pom.xml进一步了解其意义。
4. 经过以上步骤,应该就能正常编译,并打包成一个.tar.gz的安装包。
Spark集群的组织形式有三种:
1. Standalone:使用akka作为网络IO组件,master和worker之间采用actor模型进行组织。简单说就是spark自己实现了集群中的各个节点上的服务。
2. Yarn:直接使用Yarn框架完成资源分配和分布式管理功能,spark只是简单地把任务提交给yarn框架。
3. Mesos:没用过。
我使用Standalone的模式来搭建集群,手上有三台服务器,预计的分布如下:
Server1: master+ worker
Server2: worker
Server3: worker
操作过程如下:
1. 在三台服务器之间建立信任关系,因为spark需要信任关系来启动各个worker。
2. 在三台服务上安装scala。
3. 将安装压缩包解压到Server1的/home/work/spark/目录下。
4. 配置conf/ spark-env.sh为以下内容:
curdir=`dirname $0`
cd $curdir
curdir=`pwd`
cd -
export SCALA_HOME=$curdir/../../scala
export SPARK_WORKER_MEMORY=16g
export SPARK_MASTER_IP=10.208.63.43
export MASTER=spark://10.208.63.43:7077
其中10.208.63.43是Master服务所在服务器Server1的IP。
5. 配置conf/ slavae为以下内容:
Server1
Server2
Server3
Slave文件不配置也可以,如果不配置,那就需要自己手动去启动各个worker。
6. 在server1上使用rsync命令把安装包同步到其他两台服务器上:
rsync -avspark Server2:/home/work/
rsync -avspark Server3:/home/work/
7. 在Server1中使用./sbin/start-all.sh来启动集群。
8. 观察各个服务的日志是否成功启动。