Spark Mesos 架构图
Apache Mesos采用Master/Slave架构,主要由Mesos Master、Mesos Slave、Framework和Executor四部分组成,整体架构如下如所示。其中Mesos Master是整个系统的核心,Framework是外部的计算框架,它们通过注册接入Mesos后,由Mesos Master进行统一管理和资源分配,具体的执行任务由Executor执行,不同的计算框架需要实现自己的Executor。也就是Mesos采用双层调度框架:
- Mesos Master分配资源给外部框架。
- 外部框架的调度模块将资源分配给外部框架的内部计算任务。
Mesos资源调度分为粗粒度调度和细粒度调度:
- 粗粒度调度:Executor获得资源后就长期持有,直到应用程序退出才释放资源。
- 细粒度调度:Executor根据任务的实际需要动态申请资源,任务完成以后归还资源给系统。
Spark 可以通过spark.mesos.coarse true or false
来设置粗粒度模式或者细粒度模式。
架构图如下:
粗粒度调度模式
Client在启动时通过CoarseMesosSchedulerBackend向Mesos Master获取资源,CoarseMesosSchedulerBackend额外实现了Mesos的资源调度接口,可以向Mesos资源调度框架注册和接受来自Mesos的资源分配,得到资源之后他会通过Mesos远程启动CoarseGrainedExecutorBackend。
在粗粒度模式下,Executor从Mesos Master获取的资源会等到所有的计算任务结束(退出应用程序)时才会向Mesos归还资源。
细粒度调度模式
细粒度调度模式和粗粒度调度模式的实现基本相同,只不过在细粒度模式下是按照任务来向Mesos Master申请资源,并且在计算任务结束后就归还资源。
这种模式避免了资源浪费问题,但是每次任务调度都会从系统动态申请资源,所以调度的时间开销比较大,对于运行时间短但计算任务比较多的应用性能会变得很差。
Reference:
[1] Spark技术内幕:深入解析Spark内核架构设计与原理实现(张安站)