精华内容
参与话题
问答
  • mesos

    2019-10-02 16:22:23
    1.1 mesos(分布式资源管理器) 1) 什么是MesosMesos是一个开源的资源管理系统,可以对集群中的资源做弹性管理。 Mesos中包含四类主要的服务(实际上是一个socketserver—服务端口),它们分别是Mesos ...

    1.1           mesos(分布式资源管理器)

    1)   什么是Mesos?

    Mesos是一个开源的资源管理系统,可以对集群中的资源做弹性管理。

     

     

    Mesos中包含四类主要的服务(实际上是一个socketserver—服务端口),它们分别是Mesos Master,Mesos Slave(从服务),SchedulerProcess(调度进程)和ExecutorProcess(执行进程),它们之间通过Protocal Buffer消息进行通信,每种服务内部注册了若干种Protocal Buffer消息处理器,一旦收到某种消息,则会调用相应的消息处理器进行处理。除了以上四种服务之外,Mesos还对外提供了三种可编程组件,分别是Alloctor(分配器)、Framework Scheduler(框架调度器)和Framework Executor(框架执行器),编写这几个组件必须按照要求实现了几个接口,而这些接口将分别被下图中相邻的服务调用。

    大部分人看到以上Mesos架构后,均会认为Framework必须是一个通用的框架,比如MapReduce、Storm、Spark等,而Mesos Master负责将资源分配给各个框架,而各个框架的Scheduler进一步将资源分配给其内部的各个应用程序。这种观念是错误的,是对Mesos架构的一种错误解读。

    事实上,Framework不仅可以是通用的框架,也可以是像Hadoop的Job或者YARN的Application那样的简单计算任务,也就是说,Framework并不需要一定是一个“Framework”,或者一个长时间运行的服务(比如JobTracker等),也可以是一个短生命周期的Job或者Application。如果让Framework对应一个Hadoop Job,则可以这样设计Framework Scheduler和Framework Executor:.

    (1)Framework Scheduler功能

    Framework Scheduler负责按照作业的输入数据量,将之分解成若干任务,并为这些任务申请资源、监控这些任务的运行状态,一旦发现某个任务运行失败则重新为之申请资源。

    (2)Framework Executor功能

    为一个节点上的Map Task或者Reduce Task准备运行环境,包括准备各种jar包、二进制文件,设置必要的环境变量,进行必要的资源隔离,启动Jetty Shuffle以为Reduce Task提供远程数据拷贝服务等,接收来自Framework Scheduler的命令(启动任务、杀死任务等),并执行。

    通过上面的介绍可以知道,Framework Scheduler只负责运行一个Hadoop Job,而如果你对YARN比较熟悉,便会发现者正是YARN中的MapReduce ApplicationMaster做的事情,没错,Mesos与YARN的设计架构如此的相近,以至于我们很容易通过修改YARN 的任何一个ApplicationMaster,让它作为一个Framework Scheduler运行在Mesos中。

    最近Mesos提供了一个mesos-submit工具(https://github.com/apache/mesos/blob/trunk/docs/Using-the-mesos-submit-tool.md,注意,该工具尚不完善),该工具可以让用户的Framework Scheduler运行在任何一个Mesos Slave上,以防止客户端运行过多的Framework Scheduler,这样,Mesos的整个架构和工作流程已经变得与YARN相差无几了。

    Mesos与yarn区别:

    Mesos中的组件

    YARN中的组件

    功能

    Mesos Master

    Resource Manager

    整个集群的资源管理和调度

    Mesos Slave

    Node Manager

    单个节点的资源管理(资源隔离、汇报等)、任务启动等

    Framework Executor

    Framework Scheduler

    ApplicationMaster

    单个应用程序的管理和资源二次调度,基本操作均包括注册、资源申请/获取、资源分配(给内部的任务)等。

    2)     Mesos的任务分配过程分析:

     

     

    1. 步骤1 当出现以下几种事件中的一种时,会触发资源分配行为:新框架注册、框架注销、增加节点、出现空闲资源等;
    2. 步骤2 Mesos Master中的Allocator模块为某个框架分配资源,并将资源封装到ResourceOffersMessage(Protocal Buffer Message)中,通过网络传输给SchedulerProcess;
    3. 步骤3 SchedulerProcess调用用户编写的Scheduler中的resourceOffers函数(不能版本可能有变动),告之有新资源可用;
    4. 步骤4 用户的Scheduler调用MesosSchedulerDriver中的launchTasks()函数,告之将要启动的任务;
    5. 步骤5 SchedulerProcess将待启动的任务封装到LaunchTasksMessage(Protocal Buffer Message)中,通过网络传输给Mesos Master;
    6. 步骤6 Mesos Master将待启动的任务封装成RunTaskMessage发送给各个Mesos Slave;
    7. 步骤7 Mesos Slave收到RunTaskMessage消息后,将之进一步发送给对应的ExecutorProcess;
    8. 步骤8 ExecutorProcess收到消息后,进行资源本地化,并准备任务运行环境,最终调用用户编写的Executor中的launchTask启动任务(如果Executor尚未启动,则先要启动Executor)。
    3)   在一个Mesos Slave上,一个任务启动过程如下图所示:

     

     

    4)   Hadoop框架中framework与executor向mesos注册过程。

    Framework注册过程

     

     

    (1) JobTracker启动时,会调用MesosScheduler的start()方法

    (2) MesosScheduler的start()方法创建一个MesosSchedulerDriver对象,并将自己作为参数传入该对象。

    (3) MesosSchedulerDriver初始化,创建一个SchedulerProcess对象

    (4) MesosSchedulerDriver初始化,调用MasterDetector::create(),它将向SchedulerProcess对象发送一个NewMasterDetectedMessage消息

    (5) SchedulerProcess对象收到NewMasterDetectedMessage消息后,向Master发送一个RegisterFrameworkMessage消息

    (6) Master收到该消息后,保存相关信息,并返回FrameworkRegistedMessage消息,确认framework注册成功

     

     

    Executor注册过程

    本节描述框架frameworkX在某个slaveX上注册executor executorX的过程:

    (1)Master第一次向slaveX发送执行frameworkX中task的消息 RunTaskMessage

    (2)slave收到该消息后,运行相应的消息处理函数runTask()

    (3)该函数发现该slave上未启动frameworkX对应的executorX,则调用IsolationModule的lauchExecutor()函数

    (4)该函数创建一个FrameworkExecutor对象,并调用ExecutorProcess的Initialize()函数进行初始化,同时启动TaskTracker

    (5)Initialize()函数创建消息RegisterExecutorMessage,并发送给slave

    (6)Slave收到该消息后,调用对象的消息处理函数registerExecutor,该函数创建ExecutorRegisteredMessage消息,返回给ExecutorProcess

    (7)ExecutorProcess收到该消息后,调用对应的消息处理函数registered(),该函数再进一步调用FrameworkExecutor的registered()函数

     

     

    接下来,master发送给slave的RunTaskMessage消息依次经过的流程如下图所示。

     

     

    需要注意的是,对于同一个计算框架,Mesos在一个slave上只会创建一个资源container,所有task全部在这个container里运行,也就是说,mesos无法做到task级别的隔离,只能做到executor级别的隔离,而对于同一个框架,同一个slave上所有task全部在一个executor中运行。

    对于Hadoop而言,每个mesos-slave上只会创建一个TaskTracker,且该TaskTracker会被放置到一个executor(对应一个linux container)中运行,而同一个TaskTracker上所有task均在该TaskTracker所在进程树中,因而共享该executor对应的资源。当TaskTracker接收到新的task时,会增加该executor可以使用的资源量(使用“lxc-cgroup –n %s %s %lld”),而当有task运行完成时,则减少该executor可使用的资源量(使用“lxc-cgroup –n %s %s %lld”)。

    5)   Mesos模块间通信架构

    对于某个计算框架(如Hadoop,Spark等),如果想接入Mesos,需要编写两个组件,分别是FrameworkSchduler和FrameworkExecutor,这两个组件分别实现Scheduler和Executor接口,并分别通过SchedulerDriver和ExecutorDriver接入Mesos,如图中黑色虚线,表示这几个组件之间通过函数调用产生关系。其他组件,即mesos-master,mesos-save,SchedulerProcess和ExecutorProcess之间则通过消息机制进行通信(使用libprocess开源库)。

    (1)【SchedulerProcess与mesos-master】:mesos-master为各个framework分配资源,这些资源直接传递给SchedulerProcess,再由SchedulerProcess调用 FrameworkScheduler的相关函数,由FrameworkScheduler将这些资源分配给框架中的任务,并返回给mesos-master,由mesos-master转发给相应的mesos-slave。

    (2)【SchedulerProcess与Mesos-slave】:如果SchedulerProcess中保存了Mesos-slave的地址,则直接将相关消息发送给Mesos-slave,不必再由mesos-master转发。

    (3)【Mesos-master与Mesos-slave】:Mesos-master管理mesos-slave,如监控slave的健康状况等

    (4)【Mesos-slave与ExecutorProcess】:Mesos-slave负责管理各个framework的executor,并为executor分配资源等。

    具体如下图所示。

     

    转载于:https://www.cnblogs.com/sdifens/p/11350859.html

    展开全文
  • Mesos

    2019-10-31 17:48:55
    深入浅出 Mesos(一):为软件定义数据中心而生的操作系统 很优雅的两级调度架构开始说起。 上图修改自 Apache Mesos 网站上的图片,如图所示,Mesos 实现了两级调度架构,它可以管理多种类型的应用程序。第一级...

    深入浅出 Mesos(一):为软件定义数据中心而生的操作系统

    很优雅的两级调度架构开始说起。

    深入浅出Mesos(一):为软件定义数据中心而生的操作系统

    上图修改自 Apache Mesos 网站上的图片,如图所示,Mesos 实现了两级调度架构,它可以管理多种类型的应用程序。第一级调度是 Master 的守护进程,管理 Mesos 集群中所有节点上运行的 Slave 守护进程。集群由物理服务器或虚拟服务器组成,用于运行应用程序的任务,比如 Hadoop 和 MPI 作业。第二级调度由被称作 Framework 的“组件”组成。Framework 包括调度器(Scheduler)和执行器(Executor)进程,其中每个节点上都会运行执行器。Mesos 能和不同类型的 Framework 通信,每种 Framework 由相应的应用集群管理。上图中只展示了 Hadoop 和 MPI 两种类型,其它类型的应用程序也有相应的 Framework。

    Mesos Master 协调全部的 Slave,并确定每个节点的可用资源,

    聚合计算跨节点的所有可用资源的报告,然后向注册到 Master 的 Framework(作为 Master 的客户端)发出资源邀约。Framework 可以根据应用程序的需求,选择接受或拒绝来自 master 的资源邀约。一旦接受邀约,Master 即协调 Framework 和 Slave,调度参与节点上任务,并在容器中执行,以使多种类型的任务,比如 Hadoop 和 Cassandra,可以在同一个节点上同时运行。

     

    深入浅出Mesos(二):Mesos的体系结构和工作流

    Mesos流程

    接着上一篇文章说。并结合前述的加州大学伯克利分校的白皮书以及Apache Mesos网站,开始我们的讲述:

    我们来研究下上图的事件流程。上一篇谈到,Slave是运行在物理或虚拟服务器上的Mesos守护进程,是Mesos集群的一部分。Framework由调度器(Scheduler)应用程序和任务执行器(Executor)组成,被注册到Mesos以使用Mesos集群中的资源。

    • Slave 1向Master汇报其空闲资源:4个CPU、4GB内存。然后,Master触发分配策略模块,得到的反馈是Framework 1要请求全部可用资源。
    • Master向Framework 1发送资源邀约,描述了Slave 1上的可用资源。
    • Framework的调度器(Scheduler)响应Master,需要在Slave上运行两个任务,第一个任务分配<2 CPUs, 1 GB RAM>资源,第二个任务分配<1 CPUs, 2 GB RAM>资源。
    • 最后,Master向Slave下发任务,分配适当的资源给Framework的任务执行器(Executor),接下来由执行器启动这两个任务(如图中虚线框所示)。 此时,还有1个CPU和1GB的RAM尚未分配,因此分配模块可以将这些资源供给Framework 2。
    展开全文
  • MESOS

    2018-12-25 14:37:12
    二、mesos官网 http://mesos.apache.org/ 三、mesos docker安装方式  1、安装zookeeper docker pull zookeeper:3.4 docker run --name some-zookeeper --restart always -d zookeeper 2、安装mesos-master docker ...

    一、github.com查询
    二、mesos官网
    http://mesos.apache.org/
    三、mesos docker安装方式 
    1、安装zookeeper
    docker pull zookeeper:3.4
    docker run --name some-zookeeper --restart always -d zookeeper
    2、安装mesos-master
    docker pull mesosphere/mesos-master:1.4.1

    vim mesos-master.sh
    #!/bin/bash
    docker run -d --net=host \
      --hostname=192.168.192.101 \
      -e MESOS_PORT=5050 \
      -e MESOS_ZK=zk://192.168.192.100:2181/mesos \
      -e MESOS_QUORUM=1 \
      -e MESOS_REGISTRY=in_memory \
      -e MESOS_LOG_DIR=/var/log/mesos \
      -e MESOS_WORK_DIR=/var/tmp/mesos \
      -v "$(pwd)/log/mesos:/var/log/mesos" \
      -v "$(pwd)/work/mesos:/var/tmp/mesos" \
      mesosphere/mesos-master:1.4.1 \
      --no-hostname_lookup --ip=192.168.192.101
      
    访问192.168.192.101:5050
    3、安装mesos-slave
    docker pull mesosphere/mesos-slave:1.4.1

    vim mesos-slave.sh
    #!/bin/bash
    docker run -d --net=host --privileged \
      --hostname=192.168.192.102 \
      -e MESOS_PORT=5051 \
      -e MESOS_MASTER=zk://192.168.192.100:2181/mesos \
      -e MESOS_SWITCH_USER=0 \
      -e MESOS_CONTAINERIZERS=docker,mesos \
      -e MESOS_LOG_DIR=/var/log/mesos \
      -e MESOS_WORK_DIR=/var/tmp/mesos \
      -v "$(pwd)/log/mesos:/var/log/mesos" \
      -v "$(pwd)/work/mesos:/var/tmp/mesos" \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v /sys:/sys \
      -v /usr/bin/docker:/usr/local/bin/docker \
      mesosphere/mesos-slave:1.4.1 \
      --no-hostname_lookup --ip=192.168.192.102 \
      --no-systemd_enable_support
    4、安装marathon
    docker pull mesosphere/marathon:v1.5.2

    vim marathon.sh
    #!/bin/bash
    docker run -d --net=host \
    mesosphere/marathon:v1.5.2 \
    --master zk://192.168.192.100:2181/mesos \
    --zk zk://192.168.192.100:2181/marathon

    192.168.192.101:8080 

    4、安装marathon-lb
    docker pull mesosphere/marathon-lb:v1.11.1
    vim /marathon-lb.sh
    #!/bin/bash
    docker run -d --net=host -p 9090 \
    -e PORTS=9090 mesosphere/marathon-lb:v1.11.1 sse \
    --marathon http://192.168.192.101:8080 --group external 
    5、服务部署
    ID cpu mem img network force
    containerPort
    servicePort
    HAPROXY_GROUP external
    6、健康检查

    展开全文
  • Mastering Mesos

    2016-12-06 16:08:56
    The ultimate guide to managing, building, and deploying large-scale clusters with Apache Mesos, About This Book, Master the architecture of Mesos and intelligently distribute your task across clusters...
  • Mesos authentication

    2021-01-01 04:18:46
    <div><p>Coded and tested Mesos authentication to resolve issue <a href="https://github.com/mesos/storm/issues/35">#35</a></p>该提问来源于开源项目:mesos/storm</p></div>
  • <div><ul><li>Add a check for mesos masters, only the leader will report metrics</li><li>Add a check for mesos slave, slaves will report metrics from the selected tasks only if the task is running on ...
  • vagrant-mesos 是一款运维工具,可以使 Mesos 集群的安装和运行更加容易。vagrant-mesos 支持 Mesos 0.21.0 集群,同时包括 Marathon (0.8.0) 和 Chronos (2.1.0)正在运行的框架服务器节点。这意味着,你可以使用 ...
  • Mesos Packaging

    2021-01-08 06:43:21
    <div><p>In preparation for adding our own Mesos modules, this PR switches to our Mesos packages. They're much simpler. <p>A second PR will follow soon with support for our own Marathon packages....
  • MESOS support

    2020-11-26 09:59:00
    <p>have Mesos start an orted on each node, passing the orted the contact info from mpirun using the </p><pre><code>--hnp</code></pre> cmd line option. This will cause the orted to "phone home"...
  • <p>Why cannot mesos-master detect mesos-slave after setting <code>resolve.conf</code> and running mesos-dns process.</p><p>该提问来源于开源项目:mesosphere/mesos-dns</p></div>
  • Mesos 1.1.2

    2020-11-21 21:57:28
    <div><p>This upgrades us to mesos 1.1.2. We can't go straight to newest because masters in 1.2 onward will no longer accept connections from 0.x slaves, so the upgrade path would be 😭 . ...
  • Mesos调度器Swan-Mesos.zip

    2019-07-16 06:57:35
    你可以使用 swan 在 mesos 集群上部署应用程序,并管理应用程序的整个生命周期,还可以使用新版本进行滚动更新,扩展应用程序,并且可以在应用程序或服务不可用时对应用程序和自动故障转移进行运行状况检查。...
  • <div><p>Mesos is now bumped to the latest master ...<ul><li>Bumped Mesos to latest master (apache/mesos).</li><li>Bumped dcos-mesos-modules to latest master (dcos/dcos-mesos-modules)</li><li>Bumped dcos-...
  • mesos概述

    千次阅读 2015-07-27 16:28:34
    Mesos概述

    mesos解决的问题

    不同的分布式运算框架(spark,hadoop,ES,MPI,Cassandra,etc.)中的不同任务往往需要的资源(内存,CPU,网络IO等)不同,它们运行在同一个集群中,会相互干扰,为此,应该提供一种资源隔离机制避免任务之间由资源争用导致效率下降,考虑到资源利用率,运维成本,数据共享等因素,公司一般希望将所有这些框架部署到一个公共的集群中,让它们共享集群的资源,并对资源进行统一使用,这样,便诞生了资源统一管理与调度平台,典型的代表就是mesos和yarn。

    Mesos的目标就是在不同的framework之间高效的共享硬件资源,同时简化自身的调度逻辑,使其具有尽可能大的兼容性和可扩展性,以保证在大规模集群使用环境下的健壮性和对各种可能的运算框架的普遍适用性。

    mesos基本术语解释

    • Mesos-master:协调全部的slave,并确定每个节点的可用资源,聚合计算跨节点的所有可用资源的报告,然后向注册到Master的Framework发出资源邀约。

    • Mesos-slave:向master汇报自己的空闲资源和任务的状态,负责管理本节点上的各个mesos-task,在framework成功向Master申请资源后,收到消息的slave会启动相应framework的exexutor

    • Framework:Hadoop,Spark等,通过MesosSchedulerDiver接入Mesos

    • Executor:执行器,用于启动计算框架中的task

    mesos与yarn区别

    • Mesos只负责offer资源给framework,而Yarn自己来分配资源。

    • Yarn局限在Hadoop上,没法作为别的机器管理。

    • Mesos管理CPU,Memory,Disk;而Yarn只管理Memory和CPU。

    • Mesos用lxc隔离,Yarn用进程来进行隔离(性能可能更好)。

    • 部署Mesos以后,再跑Spark或Hadoop MapReduce的时候,就不需要部署Spark和Hadoop了,直接在Mesos上运行Spark或Hadoop任务(在文件系统中指定运行所需要的框架二进制包位置)。

    • 两种系统都采用了双层调度机制,即,第一层是源管理系统(mesos/YARN)将资源分配给应用程序(或框架),第二层,应用程序将收到的资源进一步分配给内部的任务。但是资源分配器智能化程度不同,mesos是基于resource offer的调度机制,包含非常少的调度语义,他只是简单的将资源推给各个应用程序,由应用程序选择是否接受资源,而mesos本身并不知道各个应用程序资源需求;YARN则不同,应用程序的ApplicationMaster会把各个任务的资源要求汇报给YARN,YARN则根据需要为应用程序分配资源。

    • 从功能上讲YARN和Mesos相似,只是Mesos更通用,可以支持在线和离线任务。一般YARN用于调度离线任务。

    mesos架构

    mesos架构图

    总体上看,Mesos是一个master/slave结构,其中,master是非常轻量级的,仅保存了framework和mesos slave的一些状态,而这些状态很容易通过framework和slave重新注册而重构,因而很容易使用了zookeeper解决mesos master的单点故障问题。

    Mesos master实际上是一个全局资源调度器,采用某种策略将某个slave上的空闲资源分配给某一个framework,各种framework通过自己的调度器向Mesos master注册,以接入到Mesos中。而Mesos slave主要功能是汇报任务的状态和启动各个framework的executor

    细粒度分配

    Mesos最大的好处是能够对分布式集群做细粒度资源分配。如下图所示,左边是粗粒度的资源分配,右边是细粒度的资源分配。

    细粒度的资源分配是指直接按照任务实际需求分配资源,这种分配机制可大大提高资源利用率。

    细粒度

    左边有三个集群,每个集群三台服务器,分别装三种分布式计算平台,比如上面装三台Hadoop,中间三台是Spark,下面三台是Storm,三个不同的框架分别进行管理。右边是Mesos集群统一管理9台服务器,所有来自Spark、Hadoop或Storm的任务都在9台服务器上混合运行。Mesos提高了资源冗余率。粗粒度资源管理肯定带来一定的浪费,细粒度的管理提高了资源管理能力。

    Mesos的分配逻辑很简单,只要不停地报告哪些是可用资源就可以了。Mesos资源分配方法也有一个潜在的缺点,就是无中心化的分配方式,所以有可能不会带来全局最优的方式。但这个数据资源缺点对目前来讲并不是很严重。

    mesos流程

    mesos流程
    如上图所示,Mesos由始至终只做一件事情,就是分布式集群资源的分配。任务的调度和执行由每个计算框架(Framework)自己完成,这样可以容易的实现mesos的扩展性和稳定性。

    1. Slave1向Master汇报其有<4CPU,4GB RAM>的空闲资源,然后Master调用分配模块,告诉Framework1所有可用的空闲资源。
    2. Master发送一个描述Slave1当前空闲资源的resource offer给框架1。
    3. Framework1的调度器回复Master,需要运行两个task在Slave1上,第一个task需要资源<2CPU, 1GBRAM>,第二个task需要资源<1CPU, 2GB RAM>。
    4. Master把任务需求资源发送给Slave1,Slave1分配适当的资源给Framework1的executor,然后executor开始执行这两个任务,因为Slave1还剩<1CPU,1G RAM>的资源还未分配,分配模块可以将这些资源提供给Framwork2来使用。

    每当有task结束,容器会被”销毁”,释放新的资源,都会执行资源邀约(resource offer)进程。

    mesos资源分配

    Mesos早在2009年就用上了Linux的容器技术,如cgroups和Solaris Zone,时至今日这些仍然是默认的。 然而,Mesos社区增加了Docker作为运行任务的隔离机制。不管哪种隔离机制,处理流程都是相同的。

    前面提到资源邀约的概念,即由Master向注册其上的Framework发送资源邀约。 每次资源邀约包含一份Slave节点上可用的CPU、RAM等资源的列表。 Master提供这些资源给它的Framework,是基于分配策略的。分配策略对所有的Framework普遍适用,同时适用于特定的Framework。 如果它不满足要求,Framework可以拒绝资源邀约,如果这样,资源邀约随即可以发给其他Framework。 由Mesos管理的应用程序通常运行短周期的任务,因此这样可以快速释放资源,缓解Framework的资源饥饿; Slave定期向Master报告其可用资源,以便Master能够不断产生新的资源邀约。 另外,还可以使用诸如此类的技术, 每个Framework过滤不满足要求的资源邀约、Master主动废除给定周期内一直没有被接受的邀约。

    DRF算法

    mesos默认资源分配策略是DRF(主导资源公平算法 Dominant Resource Fairness),DRF的目标是确保每一个Framework,在异质环境中能够接收到其最需资源的公平份额。

    为了掌握DRF,我们需要了解主导资源(dominant resource)和主导份额(dominant share)的概念。Framework的主导资源是其最需的资源类型(CPU、内存等),在资源邀约中以可用资源百分比的形式展示。例如,对于计算密集型的任务,它的Framework的主导资源是CPU,而依赖于在内存中计算的任务,它的Framework的主导资源是内存。因为资源是分配给Framework的,所以DRF会跟踪每个Framework拥有的资源类型的份额百分比;Framework拥有的全部资源类型份额中占最高百分比的就是Framework的主导份额。DRF算法会使用所有已注册的Framework来计算主导份额,以确保每个Framework能接收到其主导资源的公平份额。

    举例说明:

    假设我们有一个资源邀约,包含<9CPU,18GB RAM>。Framework1 运行任务需<1CPU,4GB RAM>,Framework2 运行任务需要<3CPU,1GB RAM>

    Framework1 的每个任务会消耗CPU总数的1/9、内存总数的2/9,因此Framework1 的主导资源是内存。同样,Framework2 的每个任务会CPU总数的1/3、内存总数的1/18,因此Framework2 的主导资源是CPU。DRF会尝试为每个Framework提供等量的主导资源,作为他们的主导份额。在这个例子中,DRF将协同Framework做如下分配:Framework1 有三个任务,总分配为<3CPU,12GB RAM>,Framework2 有两个任务,总分配为<6CPU,2GB RAM>。

    此时,每个Framework的主导资源(Framework1 的内存和Framework2 的CPU)最终得到相同的主导份额(2/3),这样提供给两个Framework后,将没有足够的可用资源运行其他任务。需要注意的是,如果Framework1 中仅有两个任务需要被运行,那么Framework2 以及其他已注册的Framework将收到的所有剩余的资源。

    DRF

    DRF分配模块跟踪分配给每个Framework的资源和每个框架的主导份额。每次,DRF以所有Framework中运行的任务中最低的主导份额作为资源邀约发送给Framework。如果有足够的可用资源来运行它的任务,Framework将接受这个邀约。通过前面引述的DRF论文中的示例,我们来贯穿DRF算法的每个步骤。为了简单起见,示例将不考虑短任务完成后,资源被释放回资源池中这一因素,我们假设每个Framework会有无限数量的任务要运行,并认为每个资源邀约都会被接受。

    回顾上述示例,假设有一个资源邀约包含9核CPU和18GB内存。Framework 1运行的任务需要(1核CPU、4GB内存),Framework 2运行的任务需要(3核CPU、2GB内存)。Framework 1的任务会消耗CPU总数的1/9、内存总数的2/9,Framework 1的主导资源是内存。同样,Framework 2的每个任务会CPU总数的1/3、内存总数的1/18,Framework 2的主导资源是CPU。
    DRF过程

    上面表中的每一行提供了以下信息:

    • Framework chosen——收到最新资源邀约的Framework。
    • Resource Shares——给定时间内Framework接受的资源总数,包括CPU和内存,以占资源总量的比例表示。
    • Dominant Share(主导份额)——给定时间内Framework主导资源占总份额的比例,以占资源总量的比例表示。
    • Dominant Share %(主导份额百分比)——给定时间内Framework主导资源占总份额的百分比,以占资源总量的百分比表示。
    • CPU Total Allocation——给定时间内接受的所有Framework的总CPU资源。
    • RAM Total Allocation——给定时间内接受的所有Framework的总内存资源。

    注意,每个行中的最低主导份额以粗体字显示,以便查找。

    最初,两个Framework的主导份额是0%,我们假设DRF首先选择的是Framework2,当然我们也可以假设Framework1,但是最终的结果是一样的。

    1. Framework 2接收份额并运行任务,使其主导资源成为CPU,主导份额增加至33%。
    2. 由于Framework 1的主导份额维持在0%,它接收共享并运行任务,主导份额的主导资源(内存)增加至22%。
    3. 由于Framework 1仍具有较低的主导份额,它接收下一个共享并运行任务,增加其主导份额至44%。
    4. 然后DRF将资源邀约发送给Framework 2,因为它现在拥有更低的主导份额。
    5. 该过程继续进行,直到由于缺乏可用资源,不能运行新的任务。在这种情况下,CPU资源已经饱和。
    6. 然后该过程将使用一组新的资源邀约重复进行。

    值得注意的是,在当资源释放的速度不够快的情况下,资源分配模块具有撤销任务的能力。Mesos尝试如此撤销任务:向执行器发送请求结束指定的任务,并给出一个宽限期让执行器清理该任务。如果执行器不响应请求,分配模块就结束该执行器及其上的所有任务。

    分配策略可以实现为,通过提供与Framework相关的保证配置,来阻止对指定任务的撤销。如果Framework低于保证配置,Mesos将不能结束该Framework的任务。

    mesos优点

    1.效率

    mesos效率

    上图来自Mesosphere网站,描绘出Mesos为效率带来的好处。如今,在大多数数据中心中,服务器的静态分区是常态,即使使用最新的应用程序,如Hadoop。这时常令人担忧的是,当不同的应用程序使用相同的节点时,调度相互冲突,可用资源互相争抢。静态分区本质上是低效的,因为经常会面临,其中一个分区已经资源耗尽,而另一个分区的资源却没有得到充分利用,而且没有什么简单的方法能跨分区集群重新分配资源。使用Mesos资源管理器仲裁不同的调度器,我们将进入动态分区/弹性共享的模式,所有应用程序都可以使用节点的公共池,安全地、最大化地利用资源。 一个经常被引用的例子是Slave节点通常运行Hadoop作业,在Slave空闲阶段,动态分配给他们运行批处理作业,反之亦然。 值得一提的是,这其中的某些环节可以通过虚拟化技术,如VMware vSphere的分布式资源调度(DRS)来完成。 然而,Mesos具有更精细的粒度,因为Mesos在应用层而不是机器层分配资源,通过容器而不是整个虚拟机(VM)分配任务。 前者能够为每个应用程序的特殊需求做考量,应用程序的调度器知道最有效地利用资源; 后者能够更好地“装箱”,运行一个任务,没有必要实例化一整个虚拟机,其所需的进程和二进制文件足矣。

    2.敏捷

    快速使用集群中可用的资源。

    3.可扩展性

    Mesos可扩展设计的关键之处是采用两级调度架构。 使用Framework代理任务的实际调度,Master可以用非常轻量级的代码实现,更易于扩展集群发展的规模。 因为Master不必知道所支持的每种类型的应用程序背后复杂的调度逻辑。 此外,由于Master不必为每个任务做调度,因此不会成为容量的性能瓶颈,而这在为每个任务或者虚拟机做调度的整体调度器中经常发生。

    4.模块化

    每接入一种新的Framework,Master无需为此编码,Slave模块可以复用,使得在Mesos所支持的宽泛领域中,业务迅速增长。相反,开发者可以专注于他们的应用和Framework的选择。 当前而且还在不断地增长着的Mesos Framework。目前已经支持的框架在下图:
    模块化

    Mesos容错

    mesos HA

    • Master: Mesos使用热备份(hot-standby)设计来实现Master节点集合。一个Master节点与多个备用(standby)节点运行在同一集群中,并由开源软件Zookeeper来监控。Zookeeper会监控Master集群中所有的节点,并在Master节点发生故障时管理新Master的选举。建议的节点总数是5个,实际上,生产环境至少需要3个Master节点。 Mesos决定将Master设计为持有软件状态,这意味着当Master节点发生故障时,其状态可以很快地在新选举的Master节点上重建。 Mesos的状态信息实际上驻留在Framework调度器和Slave节点集合之中。当一个新的Master当选后,Zookeeper会通知Framework和选举后的Slave节点集合,以便使其在新的Master上注册。彼时,新的 Master可以根据Framework和Slave节点集合发送过来的信息,重建内部状态。

    • Framework调度器: Framework调度器的容错是通过Framework将调度器注册2份或者更多份到Master来实现。当一个调度器发生故障时,Master会通知另一个调度来接管。需要注意的是Framework自身负责实现调度器之间共享状态的机制。

    • Slave: Mesos实现了Slave的恢复功能,当Slave节点上的进程失败时,可以让执行器/任务继续运行,并为那个Slave进程重新连接那台Slave节点上运行的执行器/任务。当任务执行时,Slave会将任务的监测点元数据存入本地磁盘。如果Slave进程失败,任务会继续运行,当Master重新启动Slave进程后,因为此时没有可以响应的消息,所以重新启动的Slave进程会使用检查点数据来恢复状态,并重新与执行器/任务连接。当计算节点/Slave节点无法响应多个连续的消息后,Master会从可用资源的列表中删除该节点,并会尝试关闭该节点。然后,Master会向分配任务的Framework调度器汇报执行器/任务失败,并允许调度器根据其配置策略做任务失败处理。通常情况下,Framework会重新启动任务到新的Slave节点,假设它接收并接受来自Master的相应的资源邀约。

    • Executor/task: 与计算节点/Slave节点故障类似,Master会向分配任务的Framework调度器汇报执行器/任务失败,并允许调度器根据其配置策略在任务失败时做出相应的处理。通常情况下,Framework在接收并接受来自Master的相应的资源邀约后,会在新的Slave节点上重新启动任务。

    一些问题

    • Mesos不支持抢占,无法设置任务优先级

    • spark在mesos上的资源占用有两种模式fine(细粒度)和coarse(粗粒度)。其中fine是default模式,按官方给出的文档,fine模式会提高资源利用率,但是在实际使用中我们发现,fine模式下,mesos集群有资源,spark仍然报资源不足,运行失败。而这时候改为coarse模式,问题就会消失。

    • spark运行时的文件碎片。spark shuffle会在slave机器上产生大量的文件碎片,如果slave配置不够,就会直接导致机器inode 100%。为了提高文件系统性能,你需要修改你的spark config,将spark.shuffle.consolidateFiles设置为true。

    • Mesos最适用于Job的任务持续时间短,资源需求可以灵活伸缩的运算框架,如MapReduce等,对于需要长时间占用大量资源类型的Job,其非全局式的资源调度可能较难实现近似最优的调度。Google的Omega调度框架则试图同时解决这些问题。

    参考文档

    http://www.infoq.com/cn/author/韩陆

    http://mesos.apache.org/documentation/latest/mesos-architecture/

    http://www.csdn.net/article/2015-07-10/2825180

    展开全文
  • The mesos driver might crash, leaving a orphaned mesos framework not able to release mesos offers... <p>Btw, configuring mesos offer timeout option to 10min (for example) does not solve the issue. <p>...
  • apache mesos

    2020-01-03 20:29:24
    apache mesos 是 一个开源的集群管理工具。 mesos使用了容器技术和 zookeeper技术 mesos扮演一个分布式内核的角色。 mesos framework 帮助用户来执行长运行态服务, 类似于init, corn系统等 mesos解决了数据中心的...
  • Apache Mesos Essentials

    2017-03-05 11:04:34
    讲述Mesos的入门使用,并深入分析Mesos内部机制与基于Mesos的开发
  • <p>Anyway, what about supporting zookeeper urls (zk://mesos1:2181,mesos2:2181,mesos:2181/mesos) as the endpoint, so the UI can always talk to the leader?</p><p>该提问来源于开源项目:Capgemini/...
  • <div><p>Hi, <p>I bumped into this: https://github.com/mesosphere/kubernetes-mesos/issues/344</p> <p>And also: ...<p>Was wondering if there is any intention to fix this issue ...mesos/mesos-go</p></div>
  • Mesos介绍

    千次阅读 2019-09-16 10:50:58
    Mesos项目可以很容易地实现分布式应用的自动化调度。同时,Mesos自身也很高的结合和主持了Docker等相关容器技术,基于Mesos已有的大量应用框架,可以实现用户应用的快速上线。 Mesos可以将整个数据中心的资源(包括...
  • <div><p>We are running the mesosphere.io debian package of mesos 0.14.0 in our cluster and I was trying to get mesos-plugin to build against this version on my mac. I added the following to the pom....
  • mesos简介

    2018-11-05 10:03:48
    资源统一管理和调度平台-Mesos Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache Incubator中的项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。  Apache mesos中的基本术语解释 (1) Mesos-...

空空如也

1 2 3 4 5 ... 20
收藏数 8,802
精华内容 3,520
关键字:

mesos