Spark on Mesos: 粗粒度与细粒度实现分析

背景

顺着昨天spark standalone实现那篇文章继续扯淡,看看Mesos Scheduler的两种实现的异同。

对我来说,回过头再仔细看Spark在这一层的实现,思路又清晰了许多。

Mesos粗粒度

CoarseMesosSchedulerBackend,是mesos的粗粒度scheduler backend实现。

简单说一下mesos的Scheduler,提供的回调函数,及spark实现的逻辑:

Mesos Scheduler接口 触发场景 spark实现逻辑
void registered(
  SchedulerDriver driver,
   FrameworkID frameworkId,
   MasterInfo masterInfo);
当Scheduler成向mesos master注册之后回调,
会返回唯一的framework id
得到framework的id,作为appId
void reregistered(
  SchedulerDriver driver,
   MasterInfo masterInfo)
是mesos换了个新选举出来的master的时候触发,
前提是该scheduler之前已经注册过了
没有实现。
void resourceOffers(
  SchedulerDriver driver,
  List<Offer> offers)
mesos提供了一批可用的资源,让scheduler可以使用或拒绝这些资源。
每个Offer是以slave为单位的,即以slave为单位的资源列表。
得到mesos的Offers列表,只要已经启动的executor还不足够,
那么从资源列表里继续获取资源,启动CoarseGrainedExecutorBackend。
void offerRescinded(
  SchedulerDriver driver,  
  OfferID offerId)
当请求的offer不可用时回调(可能是slave lost了之类的原因导致的),
如果在这上面继续起task的话会报Task Lost的状态。
没有实现。spark在task scheduler层面对lost的task有自己的处理,。
void statusUpdate(
  SchedulerDriver driver,
  TaskStatus status)
task状态更新回调,可能是finish了,可能是lost了,可能是fail了等等 得到finished、failed、lost等task状态,更新内存里维护的task状态,
并触发新一轮的reviveOffers,即通过task scheduler继续把resource分配给需要的task并执行它们。
void frameworkMessage(
  SchedulerDriver driver,
  ExecutorID executorId,
  SlaveID slaveId,
  byte[] data)
用于接收executor主动发的消息 没有实现。mesos虽然在内部提供了这种msg接口,貌似不是很稳定。
使用方可以使用自己的RPC来做executor与scheduler的通信,如果真的需要的话。
void disconnected(
  SchedulerDriver driver)
当scheduler与master断开的时候触发,
原因可能是master挂了,或者master换了等等。
没有实现。spark前面就没有实现master新选举的接口。
void slaveLost(
  SchedulerDriver driver,
   SlaveID slaveId)
通知某个slave lost了,以便framework进行任务的rescheduler或其他逻辑 spark把slave lost和executor lost一起处理了。
处理逻辑就是执行RemoveExecutor操作,最终调用TaskScheduler的executorLost方法,把executor的状态移除,
并且会继续向上调用DAGScheduler的handleExecutorLost方法。
因executor lost可能会影响到shuffle数据,这部分还需要BlockManager感知。
void executorLost(
  SchedulerDriver driver,
  ExecutorID executorId,
  SlaveID slaveId,
  int status)
通知某个slave上的executor挂了。 同上
void error(
 SchedulerDriver driver,
  String message)
scheduler或scheduler driver发送错误触发 没有实现

另一方面,要说明一下mesos的SchedulerDriver。

它相当于是Scheduler与mesos通信的一个连接人,一方面是管理Scheduler的生命周期,二方面是与mesos交互,让它启停task。

在初始化SchedulerDriver的时候,向里面传入spark自己实现的Scheduler就可以了,即CoarseMesosSchedulerBackend或MesosSchedulerBackend。在每个mesos的Scheduler接口的回调方法里,都会传回SchedulerDriver,以对应可以进行scheduler的启停和task的启停管理。

CoarseMesosSchedulerBackend内部主要维护的信息为:slave与executor的对应关系,executor与task的对应关系,task与slave的对应关系。

Mesos细粒度

翻译下注释:

细粒度模式下,允许多个app共享nodes,包括空间,即不同app的tasks可以跑同几个core,和时间,即一个core可以切换ownership。

这块共享的控制,在mesos端,所以spark在实现的时候,其实差别和难度都不大。

 

MesosSchedulerBackend的实现:

在resourceOffers逻辑里,获得mesos提供的slave资源后,直接在里面调用scheduler的resourceOffers,即TaskSchedulerImpl的分配task的逻辑。也就是说,会按优先级,从active task sets(来自多个app)里选择并直接launch task。而粗粒度里的做法,是先启动executorbackend,把资源准备好,进程先拉起,供app去launch task。

 

其他回调接口的逻辑是大同小异的。

 

还有一点不同之处,粗粒度模式下executor的实现使用的是与standalone模式相同的CoarseGrainedExecutorBackend。在细粒度模式下,executor的实现是MesosExecutorBackend,实现了spark的ExecutorBackend和mesos的MesosExecutor。实际上,在类里面,还是使用的spark的executor,在对应的回调里执行start/kill task这样的操作。另外,mesos的ExecutorDriver用于负责与mesos通信,比如传递一些状态更新的消息,或有特殊的msg要发送。executor这块的差别无关紧要。

 

在我看来,executor这块最终一定是落到了spark的executor上,里面有一个线程池,可以跑spark的ShuffleMapTask或ResultTask。而mesos粗、细粒度的Scheduler实现,最大区别在于resourceOffers的逻辑,是怎么处理分配的进程资源:粗粒度是预先拉起执行进程,而细粒度是直接通过TaskScheduler来摆放执行线程了。

粗细粒度分别适合跑什么样的任务,可以具体见 官方文档这一节

全文完  :)

时间: 2024-11-16 05:03:34

Spark on Mesos: 粗粒度与细粒度实现分析的相关文章

Spark on Mesos: 粗粒度与细粒度实现分析 (markdown排版)

背景 Mesos粗粒度 Mesos细粒度 背景 顺着昨天spark standalone实现那篇文章继续扯淡,看看Mesos Scheduler的两种实现的异同. 对我来说,回过头再仔细看Spark在这一层的实现,思路又清晰了许多. Mesos粗粒度 CoarseMesosSchedulerBackend,是mesos的粗粒度scheduler backend实现. 简单说一下mesos的Scheduler,提供的回调函数,及spark实现的逻辑: Mesos Scheduler接口 触发场景

数据处理平台架构中的SMACK组合:Spark、Mesos、Akka、Cassandra以及Kafka

在今天的文章中,我们将着重探讨如何利用SMACK(即Spark.Mesos.Akka.Cassandra以及Kafka)堆栈构建可扩展数据处理平台.虽然这套堆栈仅由数个简单部分组成,但其能够实现大量不同系统设计.除了纯粹的批量或者流处理机制之外,我们亦可借此实现复杂的Lambda以及Kappa架构. 在本文开始阐述之前,让我们首先立足于已有生产项目经验从设计与示例入手进行说明. 综述 • Spark - 一套高速通用型引擎,用于实现分布式大规模数据处理任务. • Mesos - 集群资源管理系统

《深入理解SPARK:核心思想与源码分析》一书正式出版上市

自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问题.由于研究和

深入理解Spark:核心思想与源码分析

大数据技术丛书 深入理解Spark:核心思想与源码分析 耿嘉安 著 图书在版编目(CIP)数据 深入理解Spark:核心思想与源码分析/耿嘉安著. -北京:机械工业出版社,2015.12 (大数据技术丛书) ISBN 978-7-111-52234-8 I. 深- II.耿- III.数据处理软件 IV. TP274 中国版本图书馆CIP数据核字(2015)第280808号 深入理解Spark:核心思想与源码分析 出版发行:机械工业出版社(北京市西城区百万庄大街22号 邮政编码:100037)

《深入理解SPARK:核心思想与源码分析》(第1章)

       自己牺牲了7个月的周末和下班空闲时间,通过研究Spark源码和原理,总结整理的<深入理解Spark:核心思想与源码分析>一书现在已经正式出版上市,目前亚马逊.京东.当当.天猫等网站均有销售,欢迎感兴趣的同学购买.我开始研究源码时的Spark版本是1.2.0,经过7个多月的研究和出版社近4个月的流程,Spark自身的版本迭代也很快,如今最新已经是1.6.0.目前市面上另外2本源码研究的Spark书籍的版本分别是0.9.0版本和1.2.0版本,看来这些书的作者都与我一样,遇到了这种问

Run Spark on Mesos with Zookeeper

本文面向对Spark,Mesos和Zookeeper有一点了解的读者,介绍下Run Spark on Mesos with Zookeeper的方法和一些注意点.因为Spark和Mesos的相关文档里,关于结合Zookeeper之后应该怎么改写相应URL和参数这块讲得不太清楚. 版本信息 Zookeeper 3.4.5 stable Spark 0.8 Mesos 0.13 没有Zookeeper的时候 Mesos master通过下面的方式启动自己并挂起来(Mesos-0.13里,起maste

Swarm、Fleet、Kubernetes、Mesos - 编排工具的对比分析

本文讲的是Swarm.Fleet.Kubernetes.Mesos - 编排工具的对比分析,[编者的话]此篇文章是<Using Docker>一书的作者 Adrian Mouat 编写,详细对比分析了Swarm.Fleet.K8s以及Mesos的区别. 大部分软件系统是随时间演进的,新旧功能会交替,不断变化的用户需求意味着一个高效的系统必须能够迅速扩展或收缩资源.为了达到接近零宕机的需求,一个单独的数据中心需要自动地将故障转移到预设的备份系统. 在此之上,一些大型企业经常会运行多个这样的系统或

【Spark Summit East 2017】基于Spark ML和GraphFrames的大规模文本分析管道

本讲义出自Alexey Svyatkovskiy在Spark Summit East 2017上的演讲,主要介绍了基于Spark ML和GraphFrames的大规模文本分析管道的实现,并介绍了用于的描绘直方图.计算描述性统计的跨平台的Scala数据聚合基元--Histogrammar package,并分享了非结构化数据处理.高效访问的数据存储格式以及大规模图处理等问题.

深入理解Spark:核心思想与源码分析. 导读

  大数据技术丛书   深入理解Spark:核心思想与源码分析 耿嘉安 著     Preface  前言 为什么写这本书 要回答这个问题,需要从我个人的经历说起.说来惭愧,我第一次接触计算机是在高三.当时跟大家一起去网吧玩CS,跟身边的同学学怎么"玩".正是通过这种"玩"的过程,让我了解到计算机并没有那么神秘,它也只是台机器,用起来似乎并不比打开电视机费劲多少.高考填志愿的时候,凭着直觉"糊里糊涂"就选择了计算机专业.等到真正学习计算机课程的时