Spark on Mesos: 搭建Mesos的一些問題
資源管理係統
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
(全文完)
最後更新:2017-04-03 16:49:03