资源管理系统
Spark可以搭建在Mesos上或YARN上,两个都是资源管理系统。了解资源管理系统的话,可以先参看以下几篇文章:
浅谈Borg/YARN/Mesos/Torca/Corona一类系统
多集群下资源共享方案介绍
统一资源管理与调度平台(系统)介绍
淘宝借助自己的第二代集群——云梯系统,把Spark部署在了YARN上,里面是淘宝技术部对Spark的一些实战小结,也算是在捣鼓阶段。
关于Mesos的论文,可以在这里下载。他的官网上文档没有github的wiki上多。
Mesos搭建
在了解了资源管理系统的一些背景之后,简单介绍下我在搭建Mesos过程中遇到的几个坑。由于我是在公司开发机上抽空搭的,开发机上我没有root权限,在build的时候有下面几个障碍:
1. Mesos是C++写的,需要经历./configure, make和make install阶段,我不太熟
2. 没有root权限,发布路径默认是/usr/local下,需要在./configure的时候加上 --prefix=/path 的参数
3. Mesos依赖gcc 4.1+的版本以及Python 2.7,开发机gcc和python版本都比较低,需要自己指定高版本的gcc和python,主要是gcc这个坑
4. 开发机不能上外网,python需要下一个egg,于是我是自己下了加进去,这就不说了,估计一般人不会有我这样的问题的
正常的搭建流程就是下载了Mesos的包之后,解压,然后./configure, make, make install就完了,参考这篇攻略。
没有root权限的时候,不仅是发布路径要指定,还有一个问题是webui默认也会从/usr/local去找,所以我在configure的时候加上了参数:
./configure --prefix=/path --disable-webui
即把webui取消了,这样在localhost:8080就不能看到master和slave的一些可视化信息了。
关于gcc的问题,开始的时候我把所有的Makefile手动修改了,凡是有gcc和g++的地方都添加了我的gcc路径,这样做并没有彻底让编译都按照高版本的gcc执行,因为依赖的东西比较多,子目录下的Makefile并没有都按照指定的gcc去make。
解决方案是把export自己的gcc path的时候,声明在PATH前面,因为PATH是从左往右读的,这样默认的gcc就是我的版本了:
export MY_PATH = {GCC_HOME}/bin export PATH = $MY_PATH : $PATH #像这样声明在前面,然后尝试 gcc -v看一下版本是否是新的当时由于这个编译问题,还在google论文上发了帖子,不过最后是自问自答解决了。把问题帖出来给大家看一下,如果有同样的情况,说明是gcc版本导致的。
Running Spark on Mesos, libmesos.so Exception: undefined symbol
其他搭建问题参考Mesos官网的简单文档。
Spark Run On Mesos
make install成功后,去发布Mesos的地方,用sbin/mesos-master启动master,然后用sbin/mesos-slave.sh --master=127.0.0.1:5050在同一个机器上起slave,然后就可以到Spark_Home下跑./run spark.examples.SparkPi 127.0.0.1:5050 看看是不是依然可以算出Pi值,可以的话就是成功了。
在此之前记得去conf/spark-env.sh里增加一些Mesos的设置:
export MESOS_HOME={PATH}/mesos/ export MESOS_NATIVE_LIBRARY={PATH}/mesos/lib/libmesos.so
(全文完)