Jason Koo

      Stay hungry, Stay foolish!

导航

mesos安装总结

Posted on 2012-12-26 20:47  Jason Koo  阅读(6643)  评论(3编辑  收藏  举报

       近期的一项任务是对比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时会需要。