真正运行spark任务的时候,才会有其他占用资源的任务被创建出来。
dcos spark run --submit-args='-Dspark.mesos.coarse=true --driver-cores 1 --driver-memory 1024M --class org.apache.spark.examples.SparkPi https://downloads.mesosphere.c ... T.jar 30'
Spark运行过程如图:
dcos spark run将任务提交给admin router
admin router将任务提交给spark framework
spark framework将任务提交给mesos-master
mesos-master将任务分发给mesos-agent进行分别处理
任务运行完毕后,所有mesos-agent上占用的资源又都释放了。
正是这种模式,才实现微服务和大数据框架的共享资源,与此相对应的是使用Docker来部署spark集群,然后集群自管理,不归mesos管理。这样在创建spark集群的时候,就需要指定spark worker占用的资源,比如16G,然而这16G资源则无论spark是否在计算,都会被占用,都不会被其他的框架使用。
五、DC/OS 1.8的新功能
对于最新的DC/OS 1.8,有一个博客 https://dcos.io/blog/2016/intr ... .html 描述了最新的功能。
其中第一个重要的功能为Mesos 1.0 and the Universal Container Runtime,也即可以使用mesos-containerizer来运行Docker的镜像了。这也是DC/OS对于容器的管理越来越独立的体现。
我们在mesos-agent所在的机器上可以查看
ip-10-0-1-78 dcos.target.wants_slave # ps aux | grep mesos-agent
root 1824 0.6 0.3 1069204 46948 ? Ssl Oct03 9:57 /opt/mesosphere/packages/mesos--19a545facb66e57dfe2bb905a001a58b7eaf6004/bin/mesos-agent
mesos-agent的配置在路径/opt/mesosphere/packages/mesos--19a545facb66e57dfe2bb905a001a58b7eaf6004下面,在/opt/mesosphere/packages/mesos--19a545facb66e57dfe2bb905a001a58b7eaf6004/dcos.target.wants_slave/dcos-mesos-slave.service里面是mesos-slave的启动参数的设置,通过mesos的文档,我们知道对于mesos的参数可以使用环境变量进行设置。
ip-10-0-1-78 dcos.target.wants_slave # cat dcos-mesos-slave.service
[Unit]
Description=Mesos Agent: DC/OS Mesos Agent Service
[Service]
Restart=always
StartLimitInterval=0
RestartSec=5
KillMode=control-group
Delegate=true
LimitNOFILE=infinity
TasksMax=infinity
EnvironmentFile=/opt/mesosphere/environment
EnvironmentFile=/opt/mesosphere/etc/mesos-slave-common
EnvironmentFile=/opt/mesosphere/etc/mesos-slave
EnvironmentFile=/opt/mesosphere/etc/proxy.env
EnvironmentFile=-/opt/mesosphere/etc/mesos-slave-common-extras
EnvironmentFile=-/var/lib/dcos/mesos-slave-common
EnvironmentFile=-/var/lib/dcos/mesos-resources
EnvironmentFile=-/run/dcos/etc/mesos-slave
ExecStartPre=/bin/ping -c1 ready.spartan
ExecStartPre=/bin/ping -c1 leader.mesos
ExecStartPre=/opt/mesosphere/bin/bootstrap dcos-mesos-slave
ExecStartPre=/opt/mesosphere/bin/make_disk_resources.py /var/lib/dcos/mesos-resources
ExecStartPre=/bin/bash -c 'for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 2 > $i; echo -n "$i: "; cat $i; done'
ExecStart=/opt/mesosphere/packages/mesos--19a545facb66e57dfe2bb905a001a58b7eaf6004/bin/mesos-agent
在文件/opt/mesosphere/etc/mesos-slave-common中配置了大量的mesos-agent的参数
MESOS_MASTER=zk://zk-1.zk:2181,zk-2.zk:2181,zk-3.zk:2181,zk-4.zk:2181,zk-5.zk:2181/mesos
MESOS_CONTAINERIZERS=docker,mesos
MESOS_LOG_DIR=/var/log/mesos
MESOS_MODULES_DIR=/opt/mesosphere/etc/mesos-slave-modules
MESOS_CONTAINER_LOGGER=org_apache_mesos_LogrotateContainerLogger
MESOS_ISOLATION=cgroups/cpu,cgroups/mem,disk/du,network/cni,filesystem/linux,docker/runtime,docker/volume
MESOS_DOCKER_VOLUME_CHECKPOINT_DIR=/var/lib/mesos/isolators/docker/volume
MESOS_IMAGE_PROVIDERS=docker
MESOS_NETWORK_CNI_CONFIG_DIR=/opt/mesosphere/etc/dcos/network/cni
MESOS_NETWORK_CNI_PLUGINS_DIR=/opt/mesosphere/active/cni/
MESOS_WORK_DIR=/var/lib/mesos/slave
MESOS_SLAVE_SUBSYSTEMS=cpu,memory
MESOS_EXECUTOR_ENVIRONMENT_VARIABLES=file:///opt/mesosphere/etc/mesos-executor-environment.json
MESOS_EXECUTOR_REGISTRATION_TIMEOUT=10mins
MESOS_CGROUPS_ENABLE_CFS=true
MESOS_CGROUPS_LIMIT_SWAP=false