简介

今天了解一下mesos,感觉老外就是牛,什么都想做一个框架出来,写一个分布式软件的难度一下子降低了好多,很多类似软件,都有用mesos重写一番,参见http://mesos.apache.org/documentation/latest/mesos-frameworks/

下面是来自apache官网的简介:

Apache Mesos abstracts CPU, memory, storage, and other compute resources away from machines (physical or virtual), enabling fault-tolerant and elastic distributed systems to easily be built and run effectively.

Mesos is built using the same principles as the Linux kernel, only at a different level of abstraction. The Mesos kernel runs on every machine and provides applications (e.g., Hadoop, Spark, Kafka, Elastic Search) with API’s for resource management and scheduling across entire datacenter and cloud environments.

这里有一句话很有意思,说mesos类似于linux kernel,但是更高层次的抽象。

操作系统有多个组成部分,但进程调度绝对算的上是核心之一。linux进程调度将进程调度到某个核心上(假设是多核cpu),对应的,mesos scheduler组件将task调度到某个slave上,这个更高层次的抽象具体的讲就是:

linux内核的进程调度器和进程运行在同一个主机上,进程调度器决定将任务队列中的任务分配某个计算单元上(即某个cpu核心)

在mesos中,scheduler和其调度的task运行在不同的主机上(mesos屏蔽了分布式系统的通信和容灾等细节),scheduler决定将task部署在某个slave的某个executor上。executor在更高层次抽象了一个完整的计算单元(包含cpu和内存等)

mesos简介

mesos包括以下概念:

Master daemon

Slave daemon

Scheduler

Executor

为task提供上下文环境

task

具体的任务,类似hadoop中的map task和reduce task

master daemon和slave daemon很好解释,而对于Scheduler和Executor抽象,我们可以通过其接口来理解,接口包含了一系列回调函数:

public abstract interface org.apache.mesos.Scheduler {

// 向SchedulerDriver注册Scheduler

public abstract void registered(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.FrameworkID arg1, org.apache.mesos.Protos.MasterInfo arg2);

// 注册成功后

public abstract void reregistered(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.MasterInfo arg1);

// 处理来自各slave的Resource offer,以决定将task分配到哪个slave上

public abstract void resourceOffers(org.apache.mesos.SchedulerDriver arg0, java.util.List arg1);

// resource offer撤回

public abstract void offerRescinded(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.OfferID arg1);

// 某个task的状态发生改变

public abstract void statusUpdate(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.TaskStatus arg1);

// 收到来自某个Executor的消息

public abstract void frameworkMessage(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.ExecutorID arg1, org.apache.mesos.Protos.SlaveID arg2, byte[] arg3);

// "失联"后

public abstract void disconnected(org.apache.mesos.SchedulerDriver arg0);

// 某个slave"失联"后

public abstract void slaveLost(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.SlaveID arg1);

// 某个executor"失联"后

public abstract void executorLost(org.apache.mesos.SchedulerDriver arg0, org.apache.mesos.Protos.ExecutorID arg1, org.apache.mesos.Protos.SlaveID arg2, int arg3);

// 运行过程中发生错误时

public abstract void error(org.apache.mesos.SchedulerDriver arg0, java.lang.String arg1);

}

executor

public abstract interface org.apache.mesos.Executor {

// 向ExecutorDriver注册Executor

public abstract void registered(org.apache.mesos.ExecutorDriver arg0, org.apache.mesos.Protos.ExecutorInfo arg1, org.apache.mesos.Protos.FrameworkInfo arg2, org.apache.mesos.Protos.SlaveInfo arg3);

// 估计是注册成功后

public abstract void reregistered(org.apache.mesos.ExecutorDriver arg0, org.apache.mesos.Protos.SlaveInfo arg1);

// “失联”后

public abstract void disconnected(org.apache.mesos.ExecutorDriver arg0);

// 运行任务

public abstract void launchTask(org.apache.mesos.ExecutorDriver arg0, org.apache.mesos.Protos.TaskInfo arg1);

// 收到scheduler杀死task的命令

public abstract void killTask(org.apache.mesos.ExecutorDriver arg0, org.apache.mesos.Protos.TaskID arg1);

// 接受scheduler发送的消息

public abstract void frameworkMessage(org.apache.mesos.ExecutorDriver arg0, byte[] arg1);

// 收到scheduler shutdown的命令

public abstract void shutdown(org.apache.mesos.ExecutorDriver arg0);

// 运行过程中出错

public abstract void error(org.apache.mesos.ExecutorDriver arg0, java.lang.String arg1);

}

言而总之,scheduler和executor提供了一系列回调函数,由scheduler driver和executor driver在合适的时机调用。从这些函数中,我们可以看到,假如我们将Scheduler/Executor(task)作为分布式框架的基本模型,那么mesos封装了大量细节,比如:

slave信息的汇集

slave有效性检测

Scheduler与Executor通信(包括task status汇报等)

从而大大减少我们编写一个分布式任务的复杂性。

简单的例子

本例由Driver、Scheduler和Executor三个类组成

Driver,类似于hadoop的驱动代码,该类主要完成以下工作:

Create Executor Info

Create Framework Info

Instantiate Scheduler

Starting the mesos scheduler driver

Scheduler

为每个slave分配一个task,当所有的任务都finished后,停掉Scheduler driver

Executor

执行任务(就是向Scheduler返回一个字符串)

我们通过java -cp xx.jar xx.xx.Driver类触发Driver执行,Driver触发scheduler driver,scheduler driver执行注册到其上的scheduler。

scheduler运行时,会将ExecutorInfo(参见示例代码)发送到slave daemon,ExecutorInfo包含了executor的启动命令java -cp xx.jar xx,进而可以触发slave端的executor driver执行executor。

引用

mesos java_mesos 入门相关推荐

  1. mesos java_Mesos实战 PDF 下载

    资料目录: 第 1 部分 你好,Mesos ................................................... 1 1 初识 Mesos ............. ...

  2. Docker、Mesos和Marathon剖析以及入门实战

    本文讲的是Docker.Mesos和Marathon剖析以及入门实战,[编者的话]国外广为流传的一个比喻是:在传统服务模式下,可以想象服务器就是IT的宠物(Pets),给它们取名字,并精心抚养长大,当 ...

  3. Flink 基本原理与生产实践分享【入门必读,概念清晰】

    Flink 基本原理与生产实践分享[入门必读,概念清晰] https://zh.wikipedia.org/zh-hans/Apache_Flink Apache Flink是由Apache软件基金会 ...

  4. Spark运行模式Local+Standalone+Yarn+mesos

    Spark运行模式Local+Standalone+Yarn+mesos bin/spark-submit --help 注意: --master MASTER_URL spark://host:po ...

  5. Spark Streaming 编程新手入门指南

    Spark Streaming 是核心Spark API的扩展,可实现实时数据流的可伸缩,高吞吐量,容错流处理.可以从许多数据源(例如Kafka,Flume,Kinesis或TCP sockets)中 ...

  6. 用python写脚本看什么书-终于知晓python编写脚本入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  7. python 科学计算基础教程电子版-终于领会python科学计算入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  8. python快速入门答案-总算懂得python脚本快速入门教程

    PyQt5是基于Digia公司强大的图形程式框架Qt5的python接口,由一组python模块构成.PyQt5本身拥有超过620个类和6000函数及方法.在可以运行于多个平台.PyQt5拥有双重协议 ...

  9. 从零开始入门 K8s | Kubernetes 存储架构及插件使用

    作者 | 阚俊宝 阿里巴巴高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 21 讲. 关注"阿里巴巴云原生"公众号,回复关键词**&quo ...

最新文章

  1. 100亿数据1万属性数据架构设计
  2. windows上报错:Could not find a version that satisfies the requirement torch==0.4.1
  3. AIX 6.1 异步 I/O 的 配置与性能评估
  4. HDU 4930 Fighting the Landlords(扯淡模拟题)
  5. 预定义异常 - PHP手册笔记
  6. Linux负载均衡软件LVS之一(概念篇)
  7. 动脑2017android_2017年最佳Android库
  8. 计算机的软件及功能是什么意思,M1版MacBook能兼容啥软件?超详细的兼容测试
  9. 基于差分进化算法的函数寻优算法
  10. tensorflow2.X tf.data.Dataset详解
  11. Fiona简介及Shapefile数据读取
  12. sws_kp操作(selenium webdriver+python)
  13. 1668: 高桥和低桥
  14. 数据库的升序降序排列
  15. 显著性假设(基础篇)
  16. 杂学第八篇:最近成功实现用applescript检测手机号码是否注册imessage,有需要的带价联系
  17. sdut 1309 不老的传说问题(区间DP,难,值得好好看)
  18. 爆肝一周,用Python在物联网设备上写了个智能语音助手
  19. Julia ---- 基于 DAG图 的并行计算:Dagger
  20. 听说你的SAP GUI会崩溃闪退?

热门文章

  1. Android LVDS格式(JEIDA与VESA)
  2. 图扑数字孪生智慧灯杆,“多杆合一”降本增效
  3. 基于Python完成的配音软件之适用于有声主播
  4. 一只伤痕累累但不断前行且不服输的蜗牛---疯狂的一个半月
  5. 32单片机关于程序移植的那些事,从F4到F1,从F1到F4
  6. (阿里云 淘宝 百度 腾讯)到此一游
  7. Android腾讯微博分享
  8. Flyme 9.2系统更新:适配魅族17、18、18s系列
  9. 用vegas制作美美哒写真相册——教程
  10. seo是计算机专业毕业,本科计算机专业的他,在34岁时成为了银行行长