mesos安裝總結


       近期的一項任務是對比Hadoop和Spark兩種分布式計算框架的迭代性能,為了更加充分合理地管理集群中的資源,用到了mesos這種資源管理平台。mesos最初是UC Berkeley AMP實驗室的一個研究項目,后來開源,並加入Apache,成為一個孵化器項目。

      從其主頁可以了解到mesos是一種集群管理器,它為不同的分布式應用或框架提供高效的資源隔離與共享服務。在mesos上面可以運行Hadoop, MPI, Hypertable, Spark和其他應用。

      mesos的用途有四點:1. 在一個動態共享的結點池中運行Hadoop, MPI, Spark和其他框架 2. 在同一個集群上運行多個Hadoop實例,以隔離生產和實驗作業,甚至是多個版本的Hadoop作業  3. 在相同的結點集合上以批應用的形式運行長期服務(比如Hypertable, Hbase) 4. 無需重新設計低級基礎設施就可以構建新的集群計算框架,並使其與現存框架共存。

      mesos的特征有:1. 使用Zookeeper,使主結點具有容錯性 2. 使用快速、事件驅動的C++實現,能夠擴展到1萬個結點 3. 使用Linux Containers實現了任務之間的隔離 4.多種資源調度(內存和CPU) 5. 高效的應用控制調度機制,讓不同框架獲得它們自身的安置目標(比如數據局部性)6.支持使用Java, Python, C++來開發新的並行應用 7. Web界面查看集群狀態。       

 

 

        首先說明一下集群環境。整個集群由四台主機組成,其中一台為master,另外三台為slave。這四台主機運行的系統為Ubuntu 11.10。主結點的hostname為master,三個從結點的hostname分別為slave1, slave2, slave3。這四台主機的/etc/hosts文件中均包含如下四行映射關系:

View Code
#ip-host映射關系
192.168.2.100   master
192.168.2.101   slave1
192.168.2.102   slave2
192.168.2.103   slave3

       注:以上映射關系非常重要,在接下來的配置過程中會一直用到。

        還有一點極其關鍵,在/etc/hosts文件中的第二行是127.0.1.1 hostname,要將所有主機上的這一行都注釋調,否則在啟動集群時,主結點總是無法啟動。更改之后最好重啟系統,以使配置生效。

       有關master和slave之間的ssh配置就不多說了,網上有很多教程,最后一定要確保從master上能夠無密碼登錄到三個slave上。

 

安裝mesos之前的系統要求:

        (1)g++ 4.1或更高版本

        (2)Python 2.6 (用於mesos的web界面)

        (3) Python 2.6 developer packages

        (4)cppunit (用於構建zookeeper)

        (5)Java JDK 1.6 或更高版本

(1) - (4)的安裝如下:

sudo apt-get install g++ python-dev  libcppunit-dev libcppunit-doc

 

       

 

以下是具體安裝的過程:

        (1)從鏡像網站下載Mesos 0.9.0-incubating,得到壓縮文件mesos-0.9.0-incubating.tar.gz。

        (2) 將壓縮文件拷貝到master結點的某個目錄中,使用如下命令解壓文件, 得到文件夾mesos-0.9.0,進入該文件。

tar zxvf mesos-0.9.0-incubating.tar.gz

         (3)進入文件夾mesos-0.9.0后,使用configure腳本配置mesos。有兩個比較重要的參數需要傳遞,一個是JDK安裝的根目錄,另一個是安裝mesos的目標位置。(請將上述兩個參數換成你自己系統中的具體位置。如果不指定安裝的目標位置,默認位置是/usr/local。)具體命令如下:

./configure --with-java-home=/home/dummy/.java/jdk1.6.0_33 --prefix=/home/dummy/mesos

         (4)還是在文件夾mesos-0.9.0下使用如下兩個命令來build和安裝mesos。 mesos被安裝在第(3)步中--prefix參數指定的位置,即/home/dummy/mesos目錄下,下面都使用<prefix>來代表mesos的安裝目錄

make
make install

         (5)使用如下命令將mesos拷貝到所有的slave結點。注意,主結點和所有從結點上mesos的位置要保持一致。

scp -r ~/mesos slave1:~/
scp -r ~/mesos slave2:~/
scp -r ~/mesos slave3:~/

         (6)在master結點上做如下兩個配置。

編輯文件<prefix>/var/mesos/deploy/masters(如果沒有可以創建),在文件中列出主結點的主機名或者IP地址。

編輯文件 <prefix>/var/mesos/deploy/slaves(如果沒有可以創建),在文件中列出從結點的主機名或者IP地址。

我的配置如下所示:

#masters文件的內容
master


#slaves文件的內容
slave1
slave2
slave3

 編輯文件<prefix>/var/mesos/conf/mesos.conf(如果沒有可以創建),配置主結點的日志文件目錄。我的配置如下:

log_dir=/home/dummy/mesos/log/

          (7)在所有從結點上做如下配置。

 編輯文件<prefix>/var/mesos/conf/mesos.conf(如果沒有可以創建),配置從結點的日志文件目錄、主結點URI和從結點資源。從結點的資源可以根據每個結點的CPU和內存的空閑情況進行配置,以供mesos調度使用。其中cpus后面的數字代表CPU有幾個核,而mem后面的數字代表分配多少空閑內存給mesos使用,單位是MB。

master=master:5050
log_dir=/home/dummy/mesos/log
resources=cpus:4;mem:2300

        (8)啟動與停止mesos集群管理器。

 如果配置正確無誤,就可以進入目錄 <prefix>/sbin/,使用如下命令啟動集群管理器。               

bash mesos-start-cluster.sh

如果使用的是 Ubuntu 12.04.2 LTS系統,那么在使用上面的命令啟動集群管理器的時候,會出現如下錯誤:

                                                             ulimit: error setting limit (operation not permitted)

該錯誤是由於啟動腳本在調用另一個腳本mesos-daemon.sh時,mesos-daemon.sh中試圖使用ulimit -n 8192命令來修改可以打開最大文件描述符的數量。在Ubuntu 12.04.2 LTS系統中,針對所有用戶,該參數默認設置為1024。而且該參數一旦設置,不能增加。例如當該參數設置為1024后,某一用戶的shell進程及其子進程可以使用命令ulimit -n 1024, ulimit -n 1000; ulimit -n 900; 而且當前命令再設置新值時,新值必須小於等於上一次設置的值,超出就會報出上面的錯誤。因此當mesos-daemon.sh腳本試圖使用ulimit -n 8192命令修改新值時,由於8192 > 1024,因而報錯。我用的Ubuntu系統是桌面系統,如果使用的操作系統是服務器版本的話,我推斷應該不會出現上面的錯誤,用作服務器的操作系統肯定會把默認值設置的很大。

知道了錯誤的原因,改錯就容易了。我們只需要把系統的默認值調大,大於等於8192即可,我將默認值設為了9000。具體做法如下:

在集群的每一台機器上重復下面三個步驟:

1)切換到root用戶,修改/etc/security/limits.conf文件,在文件的最后添加如下兩行並保存。其中的通配符*指代所有用戶,如果只想為特定用戶修改,可以將星號換成特定用戶的用戶名。

 

* soft nofile 4096
* hard nofile 4096

 

2)還是在root用戶下,修改/etc/pam.d/common-session文件,在文件的最后添加如下一行並保存。

session required pam_limits.so

3)重啟系統,以使修改將生效。

 

 

 

 停止mesos集群管理器的命令如下

bash mesos-stop-cluster.sh

 

  (9) mesos啟動后,可以通過Web界面來查看集群中的資源,以及集群中正在運行的框架和任務。具體的訪問方式是通過瀏覽器訪問master結點的8080接口,即http://master:8080/。如果mesos啟動正常,可以在該web界面上看到整個集群的資源總和和每一個slave結點的資源。如果有框架正在運行,還可以看到框架的信息,以及正在執行的任務信息。

 

       重要提示信息:

       1)如果提交作業給mesos后,發現作業執行異常,或無法執行,可以查看每個slave結點/tmp/mesos/slaves/..../stderr文件,以確定問題原因。

       2)mesos安裝目錄下的<prefix>/lib/libmesos-0.9.0.so文件很重要,在以后配置Spark時會需要。

 

         


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM