这是我参与「第四届青训营 」 笔记创作活动的第12天
1. YARN 概述
从食堂分配座位场景导入,初识调度系统;介绍调度系统发展的背景、解决的问题、目标和范型;Hadoop YARN 的设计思想和整体架构;
初识调度系统
场景描述
如何进行调度在保障就餐公平性的前提下让尽可能多的学生都能够在该餐厅就餐、尽可能多的座位被有效使用?
- 有很多简单的调度模型,但是如何保证公平性、高效性、高可用、 “尽可能多”、满足就餐学生的个性化需求需要比较好的调度模型
调度系统演进
概述
-
当用有限资源解决有限资源无法满足的需求时就需要调度。
-
资源资源管理与调度主要解决资源请求和可用资源的映射(Mapping) 问题
- 也就是将负载的资源请求与当前计算集群中的可用物理资源通过一定的调度策略进行匹配(Matching)。
- 在新型应用和集群硬件资源之间,需要利用资源进行调度:1)资源请求与可用资源映射2)利用分配的资源执行任务
- 集群资源管理与调度系统的核心目标是: 设计出更好的资源管理与调度策略,使得整个集群在保障任务SLA的前提下能够实现更高的资源利用率、更快的计算任务完成速度。
调度系统设计的基本问题
- 资源异质性与工作负载异质性
- 数据局部性
- 抢占式与非 抢占式调度
- 资源分配粒度
- 饿死与死锁问题
- 资源隔离方法
资源管理与调度系统范型
| 集中式 | 两层 | 共享状态 | 分布式 | 混合式 | |
|---|---|---|---|---|---|
| 原理 | 融合了资源管理和任务调度 | 将资源管理和任务调度解耦 | 多个调度器基于乐观并发共享全局资源视图 | 多个调度器根据先验知识进行最快的决策 | 多种类型调度器并行 |
| 应用 | Hadoop1.*版本;K8S中的kube-scheduler,Quasar | Mesos,YARN,Fuxi | Omega | Sparrow | Mercury |
YARN 设计思想
演化背景
Hadoop 1.0 时代:可扩展性差;可靠性差;资源利用率低;无法支持多种计算框架;
Hadoop 2.0 时代:资源管理和任务控制解耦;YARN(Yet Another Resource Negotiator) 支持多种计算框架的统一资源管理平台;
YARN 整体架构
系统架构
上图为 YARN 架构,主要包含两大角色:
-
Resource Manager
- 整个集群的大脑,负责为应用调度资源,管理应用生命周期;
- 对用户提供接口,包括命令行接口,API, WebUI 接口;
- 可以同时存在多个RM,同一时间只有一个在工作,RM 之间通过 ZK 选主;
-
Node Manager
- 为整个集群提供资源, 接受 Container 运行;
- 管理Contianer的运行时生命周期, 包括Localization, 资源隔离, 日志聚合等;
YARN上运行的作业在运行时会访问外部的数据服务,常见的如 HDFS, Kafka 等;在运行结束后由 YARN 负责将日志上传到 HDFS;
四大组件:(四个进程)
- ResourceManager(Rm):主进程
- 处理客户端请求
- 启动/监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
- Nodemanager(NM):各个机器节点管理器
- 单个节点上资源管理
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
- ApplicationMaster(AM):申请资源
- 程序切分
- 为应用程序申请资源,并分配任务
- 任务监控与容错
- Container:处理各个节点分布式作业的容器
- 对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关信息