首页   快速返回

YARN     所属分类 bigdata
YARN 资源管理 CPU和内存 
Yet Another Resource Negotiator


YARN产生背景
解决MRv1几个缺陷
扩展性受限
单点故障
难以支持MR之外的计算
    
多计算框架各自为战,数据共享困难
MR:离线计算框架
Storm:实时计算框架
Spark:内存计算框架


YARN设计目标
通用的统一资源管理系统 同时运行长应用程序和短应用程序
长应用程序
   通常情况下,永不停止运行的程序
   Service、HTTP Server等
短应用程序
   短时间(秒级、分钟级、小时级)内会运行结束的程序
   MR job、Spark Job等


基本架构

ResourceManager
负责集群资源的统一管理和调度
详细功能
        处理客户端请求
        启动/监控ApplicationMaster
        监控NodeManager
        资源分配与调度

NodeManager
负责单节点资源管理和使用
详细功能
        单个节点上的资源管理和任务管理
        处理来自ResourceManager的命令
        处理来自ApplicationMaster的命令

ApplicationMaster
负责应用程序的管理
详细功能
        数据切分
        为应用程序申请资源,并进一步分配给任务
        任务监控与容错

Container
任务运行环境的抽象
        任务运行资源(节点、内存、CPU)
        任务启动命令
        任务运行环境


Yarn运行流程

1.client向yarn提交job,首先找ResourceManager分配资源,
2.ResourceManager开启一个Container,在Container中运行一个Application manager
3.Application manager找一台nodemanager启动Application master,计算任务所需的计算
4.Application master向Application manager(Yarn)申请运行任务所需的资源
5.Resource scheduler将资源封装发给Application master
6.Application master将获取到的资源分配给各个nodemanager
7.各个nodemanager得到任务和资源开始执行map task
8.map task执行结束后,开始执行reduce task
9.map task和 reduce task将执行结果反馈给Application master
10.Application master将任务执行的结果反馈Application manager。



YARN容错性
ResourceManager
        存在单点故障
        基于ZooKeeper实现HA。
NodeManager
        失败后,RM将失败任务告诉对应的AM;
        AM决定如何处理失败的任务。
ApplicationMaster
        失败后,由RM负责重启;
        AM需处理内部任务的容错问题;
        保存已经运行完成的Task,重启后无需重新运行。


YARN调度框架
    双层调度框架
        RM将资源分配给AM
        AM将资源进一步分配给各个Task
    基于资源预留的调度策略
        资源不够时,会为Task预留,直到资源充足
        与“all or nothing”策略不同(Apache Mesos)

YARN资源调度器
    多类型资源调度
        采用DRF算法(论文:“Dominant Resource Fairness: Fair Allocation of Multiple Resource Types”)
        目前支持CPU和内存两种资源
    提供多种资源调度器
        FIFO
        Fair Scheduler
        Capacity Scheduler
    多租户资源调度器
        支持资源按比例分配
        支持层级队列划分方式
        支持资源抢占

YARN资源隔离方案
    支持内存和CPU两种资源隔离
        内存是一种“决定生死”的资源
        CPU是一种“影响快慢”的资源
    内存隔离
        基于线程监控的方案
        基于Cgroups的方案
    CPU隔离
        默认不对CPU资源进行隔离
        基于Cgroups的方案

YARN支持的调度语义
    支持的语义
        请求某个特定节点/机架上的特定资源量
        将某些节点加入(或移除)黑名单,不再为自己分配这些节点上的资源
        请求归还某些资源
    不支持的语义
        请求任意节点/机架上的特定资源量
        请求一组或几组符合某种特质的资源
        超细粒度资源
        动态调整Container资源

运行在YARN上的计算框架  
        离线计算框架:MapReduce
        DAG计算框架:Tez
        流式计算框架:Storm
        内存计算框架:Spark

离线计算框架:MapReduce 
    仅适合离线批处理
        具有很好的容错性和扩展性
        适合简单的批处理任务
    缺点明显
        启动开销大、过多使用磁盘导致效率低下等

DAG计算框架:Apache Tez 
    DAG计算:多个作业之间存在数据依赖关系,并形成一个依赖关系有向图( Directed Acyclic Graph ) 

和Mapreduce相比


Tez应用场景
    直接编写应用程序
        Tez提供了一套通用编程接口
        适合编写有依赖关系的作业
    优化Pig、Hive等引擎
        下一代Hive:Stinger
        好处1:避免查询语句转换成过多的MapReduce作业后产生大量不必要的网络和磁盘IO
        好处2:更加智能的任务处理引擎

上一篇     下一篇
投行三百年简史

Hadoop HBase Hive Spark

hdfs

MapReduce

Hbase

zookeeper