Apache Mesos
Mesos和Yarn一样,是一个资源统一管理与调度平台
一、Mesos基本术语
- 1.master -> 负责framework和slave,并将slave上的资源分给framework
- 2.slave -> 负责管理本节点上的task,并将计算资源分配给executor
- 3.framework -> 计算框架如Hadoop、Spark等,通过SchedulerDriver接入Mesos
- 4.executor -> 执行器,位于salve上,用于执行slave中的task
二、框架流程
- 1.接入Mesos的计算框架必须有自己的调度器Scheduler,通过Scheduler来向Mesos的SchedulerDriver接入,向master注册
- 2.framework自己管理框架内部的资源调度,计算资源向master申请资源,再分配给自己框架内部的任务
- 3.master通过对所有slave资源的汇总,通过资源调度器Allocator根据某种策略给framework分配计算资源
- 4.slave向master报告自身状态和任务状态,并启动相应框架task的executor,在Linux-Container中运行任务
三、特点
1.轻量级的master,仅保留了framework和slave的一些状态,易于重构,因此采用zookeeper很容易解决HA问题
2.利用Linux-Container隔离CPU与内存资源
3.资源分配器比较简单
四、编译
软件 | 版本 |
---|---|
OS | Mint-16-64bit |
Mesos | 0.21.0 |
- 1.下载源码及依赖
$ wget http://www.apache.org/dist/mesos/0.22.1/mesos-0.21.0.tar.gz
$ tar -zxvf mesos-0.21.0.tar.gz
$ sudo apt-get -y install build-essential python-dev python-boto libcurl4-nss-dev libsasl2-dev maven libapr1-dev libsvn-dev
$ cd mesos
$ mkdir build
$ cd build
$ ../configure
$ make
- 2.问题及解决方案
问题:g++: internal compiler error: Killed (program cc1plus) Please submit a full bug report
解决方案:由于内存不足编译失败,可以切入到编译失败的项目目录下进行部分make,然后再做整体make,使用free -m命令查看可用内存
最后还是没有解决编译失败的问题,选择了Mesosphere的二进制版本-_-
五、二进制版本配置与启动
- 1.安装deb包
$ sudo dpkg -i ***.deb
- 2.修改配置
#进入配置目录
$ cd /usr/local/etc/mesos
#添加masters和slaves文件,文件中每行是master和slave的节点主机名或IP地址
$ sudo vi masters
node
$ sudo vi slaves
node
#修改master配置
$ sudo cp mesos-master-env.sh.template mesos-master-env.sh
$ sudo vi mesos-master-env.sh
#添加下面几行
export MESOS_log_dir=/home/*/disk/mesos/master/log
export MESOS_work_dir=/home/*/disk/mesos/master/work
export MESOS_ZK=zk://node:2181/mesos
export MESOS_quorum=1
#修改slave配置
$ sudo cp mesos-slave-env.sh.template mesos-slave-env.sh
$ sudo vi mesos-slave-env.sh
#添加下面几行
export MESOS_log_dir=/home/zhy/disk/mesos/slave/log
export MESOS_work_dir=/home/zhy/disk/mesos/slave/work
export MESOS_isolation=cgroups
#修改deploy配置
$ sudo cp mesos-deploy-env.sh.template mesos-deploy-env.sh
$ sudo vi mesos-deploy-env.sh
#无需修改
- 3.启动Mesos集群
#首先要启动zookeeeper集群
$ cd /usr/zookeeper-3.4.6/bin
$ ./zkServer.sh start
#启动mesos集群
$ mesos start-cluster.sh
打开浏览器,输入http://node:5050
即可确认集群启动是否成功
- 4.Spark on Mesos配置与启动
$ cd /usr/spark-1.4.0/conf
$ sudo vi spark-env.sh
#添加以下几行内容
#mesos
export MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so
export SPARK_EXECUTOR_URI=hdfs://spark-1.4.0-bin-hadoop2.6.tgz
$ sudo vi spark-defaults.conf
#添加以下几行内容
#mesos
spark.executor.uri hdfs://spark-1.4.0-bin-hadoop2.6.tgz
spark.master mesos://node:5050
输入以下命令以测试spark on mesos是否启动成功:
$ cd /usr/spark-1.4.0/sbin
$ ./start-all.sh
$ spark-shell