
對于一個package,往往包含下面的部分:
package.json:這里面保存了一些metadata的數(shù)據(jù),例如對于spark
"name": "spark",
"description": "Spark is a fast and general cluster computing system for Big Data. Documentation: https://docs.mesosphere.com/cu ... ot%3B ,
"licenses": [
{
"name": "Apache License Version 2.0",
"url": " https://raw.githubusercontent. ... ot%3B
}
],
"tags": [
"bigdata",
"mapreduce",
"batch",
"analytics"
],
config.json:保存一些配置項,例如對于spark
"name": {
"default": "spark",
"description": "The Spark Dispatcher will register with Mesos with this as a framework name. This service will be available at http://<dcos_ur l="">/service//",
"type": "string"
},
"cpus": {
"default": 1,
"description": "CPU shares",
"minimum": 0.0,
"type": "number"
},
"mem": {
"default": 1024.0,
"description": "Memory (MB)",
"minimum": 1024.0,
"type": "number"
},
"role": {
"description": "The Spark Dispatcher will register with Mesos with this role.",
"type": "string",
"default": "*"
},
marathon.json.mustache:是一個模板,里面的一些變量會替換為config.json里面的內(nèi)容,最終變成可以直接發(fā)送給marathon的請求。以spark為例
"id": "{{service.name}}",
"cpus": {{service.cpus}},
"mem": {{service.mem}},
"container": {
"type": "DOCKER",
"docker": {
"image": "{{resource.assets.container.docker.spark_docker}}",
"network": "HOST",
"forcePullImage": true
}
},
resource.json:是一些資源,如image,tar.gz文件等
"assets": {
"container": {
"docker": {
"spark_docker": "mesosphere/spark:1.0.2-2.0.0"
}
}
},
所有的這些配置都像模板一樣已經(jīng)預(yù)先寫好,安裝的時候界面上一點,或者一行命令就安裝好了。

當(dāng)然你如果點擊Advanced Installation,則所有的配置都可以定制化

就像yum里面一樣,將mysql-server的yum包的制作者和mysql的使用者分開,普通用戶作為使用者,不需要了解太多的細(xì)節(jié),用就是了。
如果想在數(shù)據(jù)中心里面使用package管理,可以生成自己的local universe,里面放入自己的應(yīng)用,只要專業(yè)人士設(shè)計一次,便可以多次使用。也可以一次安裝多個軟件形成一個group,里面包含微服務(wù)的,也包含大數(shù)據(jù)的,兩者可以通過服務(wù)發(fā)現(xiàn)相互訪問。
我們在這里先安裝一個spark的軟件

最初安裝完畢spark,卻發(fā)現(xiàn)只有一個docker

Spark不是一個集群計算框架嗎,怎么會只有一個Docker呢?這就是mesos對大數(shù)據(jù)框架管理的特殊之處。在spark不運行任務(wù)的時候,就僅僅占用這一個docker,其實是一個框架。

安裝過程如圖所示:
dcos package install spark會將請求提交給admin router
admin router會將請求提交給cosmos,也即package管理的服務(wù)
cosmos將config.json, resource.json, marathon.json組合成為一個marathon請求提交給marathon
marathon將請求交給mesos-master,然后交給mesos-agent
mesos-agent啟動一個容器運行spark
啟動的spark容器會注冊到mesos里面成為一個新的framework