之前配置了spark的standalone模式,直接按照官方的文档没有遇到错误。后来在mesos安装了spark,安装模式记录如下:
先说下环境,之前在suse上安装没有成功,报错包括java类找不到(实际上jar包能找到这个类,没找到原因。);还有个错误是java虚拟机运行的时候段错误(SIGSEGV)。后来换了centos安装成功的。
环境:
CentOS6.4
jdk1.7.0_55
spark0.9.1(自动安装scala2.10)
mesos 0.18.0
1. 安装jdk
(http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html)
官网下载和系统相应的jdk包,我将java的安装目录放在了/usr/local/java下,创建该目录,并将下载的jdk包解压到该目录下,并且解压出来的目录重命名为jdk。如图:
最后修改环境变量,修改文件/etc/profile,
注释掉exportPATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL这一行,并在这一行之后加入java的环境变量
export JAVA_HOME=/usr/local/java/jdk
export PATH=$JAVA_HOME/bin:$PATH
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tool.jar
如图:
之后执行source /etc/profile 命令,使新的环境变量生效即可
之后可以执行java –version,若显示出java的版本号,则java安装成功。
2. 安装mesos(参考http://mesos.apache.org/gettingstarted/)
a.wget http://www.apache.org/dist/mesos/0.18.0/mesos-0.18.0.tar.gz使用wget命令下载源码包,或者到官网下载源码,http://mesos.apache.org/downloads/下载mesos源码
b.mesos是用C++编写的,新安装的centos系统,执行yum groupinstall "Development Tools" 命令,安装编译环境
c.安装一些需要的包yum install python-devel zlib-devel libcurl-devel cyrus-sasl-devel
d.解压下载的压缩包,进入目录,创建编译目录(mkdir build),进入build目录(cd build)e. 执行../configure 进行配置
f. 执行 make 编译
g. 执行make install安装
经过上面7步,mesos成功安装,下面是mesos的启动,只需要执行相应的脚本即可
我使用了三台机器:192.168.1.55(master),192.168.1.56(slave),192.168.1.77(slave)
启动master:在编译的目录(build)下,有一个bin目录,执行脚本./bin/mesos-master.sh –ip=192.168.1.55
启动slave:在相应机器的相同路径下,执行脚本./bin/mesos-slave.sh –master=192.168.1.55:5050
如果连接成功,那么就安装成功了,可以在web上输入192.168.1.55:5050,观察整个mesos的状态。
当slave启动连接时遇到了一个错误,在master中显示该slave节点不停的注册,解决方法是在slave节点上修改hosts文件,将本机的hostname和ip对应的写入,例如本机的ip是192.168.1.77,主机名为node77,则在hosts文件中加入一行
192.168.1.77 node77
此外需要注意把防火墙关掉
问题解决。
3. 安装spark(参考http://spark.apache.org/docs/latest/index.html 和
http://spark.apache.org/docs/latest/running-on-mesos.html)
http://spark.apache.org/downloads.html下载spark源码
解压源码包,这里需要注意一个问题,如果需要使用HDFS,必须修改project目录下的SparkBuild.scala中的HDFS中的版本,因为不同版本的HDFS的接口不一样,修改了之后,就执行sbt/sbt assembly进行编译了。自己没有使用HDFS所以就使用的默认的1.0.4版本,值得一提的是,本人使用2.2.0编译的时候,后来执行的时候存在刚开始说的SIGSEGV错误。没有解决。(只需要在一台机器上编译即可,本人是在192.168.1.55上编译的)
执行了sbt/sbt assembly后,可以先执行下例子,看是否编译成功。./bin/run-example org.apache.spark.examples.SparkPi local 如果成功生成了Pi的值,就说明成功了。
下面需要把编译成功的库分发到slave机器上
执行./make-distribution.sh 生成dist目录
重命名dist目录并打包 mv dist spark-0.9.1 tar czf spark-0.9.1.tar.gz spark-0.9.1
然后将压缩包复制到两个slave中,解压到和master相同的目录结构下
修改master中/conf/spark-env.sh文件
添加如下几行
exportMESOS_NATIVE_LIBRARY=/usr/local/lib/libmesos.so
exportSPARK_EXECUTOR_URI=/home/yushiyao/spark
export MASTER=mesos://192.168.1.55:5050
第一行设定mesos的库文件路径
第二行设定分发到slave上spark库的路径
最后一行设定任务到的默认的master
最后执行./bin/run-example org.apache.spark.examples.SparkPi mesos://192.168.1.55:5050如果执行成功,显示出Pi的值,就说明整个系统编译执行成功了。