一 产生背景
运维成本:
如果采用“一个框架一个集群”的模式,则可能需要多个管理员管理这些集群;进而增加运维成本,而共享模式通常需要少数管理员即可完成多个框架的统一管理。
数据共享:
随着数据量的暴增,跨集群间的数据移动不仅需花费更长的时间,且硬件成本也会大大增加,而共享集群模式可让多种框架共享数据和硬件资源,将大大减小数据移动带来的成本。
MR v1版本的缺陷:
扩展性受限制,单点故障,不支持其他分布式计算框架.
二 YARN 的由来
Yet Another Resource Negotiagor:又一个计算框架
Hadoop2.x 中发布
它是统一的集群资源管理框架,用来负责集群的管理和调度.
三 YARN基本框架
-
Resource Manager
整个集群只有一个,负责集群资源的统一管理和调度:
详细功能:- 处理客户端请求
- 启动/监控ApplicationMaster
- 监控NodeManager
- 资源分配与调度
-
Node Manager
每个节点只有一个,负责资源的管理和使用
详细功能:- 单个节点上的资源管理和任务管理
- 处理来自ResourceManager的命令
- 处理来自ApplicationMaster的命令
-
ApplicationMaster
每个应用程序只有一个,负责应用程序的管理和任务调度
详细功能:- 数据切分
- 为应用程序申请资源,进一步分配给内部任务
- 任务监控和容错
-
Container
对任务运行环境的抽象
描述一系列信息:- 任务运行资源(节点,cpu,内存)
- 任务启动命令
- 任务运行环境
四. YARN运行过程剖析
-
YARN 容错性
- Resource Manager
基于zookeeper实现HA(HADOOP2.6+) - Node Manager
失败后,RM将失败以后任务告诉对于AM
AM 决定如何处理失败任务. - Application Master
失败后,由RM负责重启。
AM需处理内部任务的容错问题。
hadoop已经实现了内部容错,spark的话就需要重头开始跑.
RMAppMaster会保存已经运行完成的task,重启后无需重新运行.
- Resource Manager
-
YARN 调度框架
- 双层调度框架
RM将资源分配给AM
AM将资源进一步分配给Task - 基于资源预留的调度策略
资源不够时,会为Task预留,直到资源充足。
- 双层调度框架
-
YARN资源调度器
- 多类型资源调度
支持cpu,内存调度 - 提供多种资源调度器
FIFO
Fair Scheduler
Capacity Scheduler - 多租户资源调度器
支持资源按照比例分配
支持层级队列划分方式
支持资源抢占
- 多类型资源调度
-
YARN 资源隔离方案
- 支持内存和cpu两种资源隔离
内存是一种“决定生死”的资源
CPU是一种“影响快慢”的资源 - 内存隔离
基于线程监控方案
基于Cgroups方案 - CPU隔离
默认不对cpu资源进行隔离
基于Cgroups隔离方案
- 支持内存和cpu两种资源隔离
五. YARN资源调度过程
-
调度方法:
-
FIFO
- 将所有应用程序放到一个队列中
- 队列前面的程序优先获得资源
- 局限性明显
资源利用率不高,无法交叉运行作业
不够灵活,比如紧急作业无法插队
-
多队列组织方式
- 将所有应用程序放到多个队列
- 每个队列可单独实现调度策略
- 每个队列对应一定比如的调度资源
优势明显:- 按队列组织资源和用户,符合生产需求
- 不同队列的资源分配策略不同,更加灵活
两种多队列调度器: Fair, Capacity
-
Capacity Scheduler
- 由Yahoo开源,共享资源调度器
- 每个队列内部采用FIFO调度策略
- 每个队列分配一定比例资源
- 可限制每个用户的资源使用量
-
- Fair Scheduler
- 由Facebook开源共享集群调度器
- 以队列方式组织作业
- 基于最小资源量与公平共享量进行调度
- 作业优先级越高,分配的资源越多
-
基于标签的调度机制
- YARN 基于标签的调度
- 基于hadoop2.6.0开始,提供基于标签的调度策略
- 常用于异构集群(操作系统不同,安装的版本不同,硬件不同)
- 思路
- 将一些高配机器打上highmemory/highdisk标签,并结合队列配置(比如reporting队列) 使之生效。
- 将所有mapreduce程序提交到reporing队列中
hadoop jar ***.jar -Dmapreduce.job.queuename=reporing...
- YARN 基于标签的调度
基于标签调度机制:原理
六. 运行在YARN上的计算框架
-
运行在YARN上的计算框架
- 离线计算框架 MapReduce
- DAG计算框架: Tez
- 流式计算框架: Storm
- 内存计算框架: Spark
MapReduce on YARN
- DAG 计算框架 Tez
- 流式计算框架 Storm
- Spark on YARN
七. 日志分析系统架构
-
资源管理模块
- 资源划分
启用 Capacity Scheduler
划分多个队列,每个队列设置一定比例资源,每个队列交由一类应用 - 资源隔离
启用cgroup资源隔离(linux 内核版本3.19上) - 异构集群
根据机器硬件资源不同,打上不同类型的标签
不同队列关联不同的机器(标签)
- 资源划分
资源划分
-
资源划分方法
资源隔离配置方法
- 节点标签
- 标签调度,启用步骤
- Yarn 配置