Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN

内容简介

    • 一、YARN的基本概述
    • 二、YARN的核心进程
        • 1.ResourceManager
        • 2.NodeManager
        • 3.ApplicationMaster
        • 4.Container
    • 三、YARN与MapReduce1的区别
        • 1.集群的可扩展性
        • 2.资源的利用率
    • 三、YARN应用运行机制
    • 四、YARN的调度机制
        • 1.FIFO调度器
        • 2.容量调度器
        • 3.公平调度器
    • 五、总结

一、YARN的基本概述

  • Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)是Hadoop三大核心组件之一,承担着Hadoop集群的资源管理重任,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。
  • YARN在Hadoop2.x后被引入,一开始只是为了改善Hadoop1.x中MapReduce程序的调用实现,但是它具备足够的通用性,同样可以支持其他的分布式计算模型,换言之,其他的分布式运算框架可以运行在YARN之上,接收YARN的调度,而YARN向那些计算框架提供高级API来调用而隐藏了资源管理的细节,比如常用的Spark就可以运行在YARN上,这就是Spark On YARN的Saprk运行模式。通过YARN作为桥梁Hadoop可以与其他大数据框架进行交互:
    Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN_第1张图片

二、YARN的核心进程

1.ResourceManager

  • ResourceManager是YARN的Master,整个集群有且只有一个工作的ResourceManager,负责整个系统的资源管理和分配,包括处理客户端请求、启动/监控 ApplicationMaster、监控 NodeManager、资源的分配与调度。它主要由两个组件构成:调度器和应用程序管理器。
    (1). 调度器(Scheduler),负责根据已有的系统资源,比如内存、磁盘空间、CPU核数等等和提交的资源申请请求,将资源以YARN中的一个抽象Container,分配给各个正在运行的应用程序,值得注意的是,调度器仅仅负责资源的分配,不负责任何与具体应用程序相关的工作,比如不负责监控或者跟踪应用的执行状态等。
    (2).应用程序管理器(Applications Manager,ASM),应用程序管理器负责接收各种分布式运算job的请求,并为其分配一个Container来启动对应的ApplicationMaster,监控 ApplicationMaster 运行状态并在失败时重新启动它等等。

2.NodeManager

  • NodeManager管理YARN集群中的每个节点。NodeManager提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。主要实现以下功能:
    (1).管理当前节点的资源。
    (2).接收并处理来自ResourceManager的请求与命令。
    (3).接收并处理来自ApplicationMaster的请求与命令。
    (4).定时地向RM汇报以确保整个集群平稳运行,RM 通过收集每个 NodeManager 的报告信息来追踪整个集群健康状态的,而 NodeManager 负责监控自身的健康状态。

3.ApplicationMaster

  • 每一个运行在YARN上的分布式运算job都有对应的一个ApplicationMaster,其主要负责管理当前分布式运算job的管理工作(YARN允许我们为自己的应用开发 ApplicationMaster),包括:
    (1).切割数据块。
    (2).向ResourceManager申请Container。
    (3).在ResourceManager分配的NodeManager上启动任务进程。
    (4).监控任务的执行,并与Client进行交互。

4.Container

  • Container是YARN中最为细的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当ApplicationMaster向ResourceManager申请资源时,ResourceManager为ApplicationMaster返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container中描述的资源。一个NodeManager可以同时分配多个Container,每一个应用程序运行在一个Container上,不允许跨Container运行。

三、YARN与MapReduce1的区别

1.集群的可扩展性

  • 在MapReduce1中运行有一个jobtracker和多个tasktracker,jobtracker为集群的Master同时负责作业的调度,任务进度的监控,任务的追踪与失败重启,记录任务流水等工作,因此当集群数量庞大了以后或者提交的作业数量多了以后jobtracker会遇到性能瓶颈,使得MapReduce1的集群节点个数和运行任务个数不能过大;而运行在YARN上的每一个job都有对应的ApplicationMaster来读者任务的监控使得YARN集群的节点个数个运行任务数比MapReduce1更多,扩展性更好。

2.资源的利用率

  • 在MapReduce1中,每一个tasktracker都配置有固定长度的Slot,这些Slot是静态分配的,在配置的时候就划分为了Map Slot和Reduce Slot,Map Slot只可以执行Map任务,Reduce Slot只可以执行Reduce任务,这无疑是一种资源的浪费,假设一个jobMap任务比较少,Reduce任务比较多,这时候Reduce Slot供不应求,需要等待,而Map Slot却有大量空闲,资源的利用率显然不高;YARN将资源统一抽象为Container,无论何种应用程序都必须运行在Container上,就不会出现MapReduce1的情况,资源的利用率大大提高。

三、YARN应用运行机制

  • YARN应用运行机制如图:
    Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN_第2张图片
    (1).客户端向ResourceManager发起请求,请求ResourceManager为其分配一个Container来启动ApplicationMaster(图中步骤1)。
    (2).ResourceManager寻找一个合适的NodeManager,为其分配一个Container(图中步骤2a),然后在Container上启动ApplicationMaster(图中步骤2b)。
    (3).ApplicationMaster启动后与ResourceManager注册进行通信,然后根据自身job的需要,向ResourceManager申请资源,即Container(图中步骤3)。
    (4).ApplicationMaster在被分配Container的NodeManager上加载Container(图中步骤4a),然后在加载的Container上启运行自己的应用程序。应用程序的代码以 task 形式在启动的Container中运行,并把运行的进度、状态等信息通过发送给ApplicationMaster。
    (5).一旦应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向 ResourceManager取消注册然后关闭,用到所有的 Container 也归还给系统。

四、YARN的调度机制

-YARN中有三种调度器可用:FIFO调度器(FIFO Scheduler),容量调度器(Capacity Scheduler),公平调度器(Fair Scheduler),而这三种调度器并不存在“最好的调度器”,需要根据实际的任务合理配置:

1.FIFO调度器

  • FIFO调度器原理是使用一个队列存放要调度的job,按照队列“先进先出”的特点进行调度,比如在t1时刻提交了一个job1,t2时刻提交一个job2,job1会优先被调度,使用集群的全部资源运行job1的作业,如果此时job3被提交则会排在job2后面等待调度,当job1被执行完后job2会被调度,以此类推,如图:
    Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN_第3张图片
    显然FIFO调度可能会引发“饥饿问题”,如果job1需要1天的时间去执行,job2只需要1个小时,但是job1先于job2进入队列所以job2会等待一天时间,造成“饥饿现象”。

2.容量调度器

  • 容量调度器允许多个job共享集群的资源,每个job可以使用一部分资源,算法如下:每个job会被放入到不同的队列,队列是事先创建并且分配好资源了的,进入同一个队列的job使用FIFO进行调度。举个例子:现在创建两个队列queue1和queue2,queue1占有集群百分之60的资源,queue2占有集群的百分之40资源,job1先提交进入queue1,因为queue1只有一个job,所以job1可以独占queue1的所有资源即集群的百分之60的资源,这时候job2提交到queue2,同理可以独占queue2的全部资源即集群的百分之40,此时又有一个job3被提交到queue1,它只能等待job1执行完之后才能执行。
    Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN_第4张图片

3.公平调度器

  • 容量调度器相比于FIFO更加地“智能”,但是任存在一种极端情况就是queue2一直没有job进来,或者queue1的job执行时间都比较短,很快就执行完了,但是queue2的job执行时间比较长,所以queue1的资源就得不到利用。公平调度器的核心思想是:假设存在两个预先创建好的队列queue1和queue2,现有一个job1被提交到queue1,因为此时只有job1一个作业运行在集群上,因此它可以得到集群的全部资源,此时有一个job2被提交到queue2上,那么一段时间后,job1和job2各自会得到集群的一半资源来执行程序,如果又有一个job3被提交到queue1,它不会等待job1执行完再执行,而是会与job1平分queue1的资源,即job1和job3均获得集群的百分之25的资源来执行程序:
    Hadoop学习之路(十 一):深入理解Hadoop三大核心组件之YARN_第5张图片
    由此可以发现,公平调度强调“公平”,它确保每个job都不需要等待即可被执行。

五、总结

  • YARN涉及的知识非常之多,本文只是做了核心部分的详细讲解,如想全面理解YARN知识的小伙伴可以去官网阅读文档或者阅读相关的书籍。YARN作为通用的资源调度框架,在生产上有着非常之重要的作用。至此,Hadoop的三大核心组件就介绍完毕了,如对其他两个组件有兴趣的小伙伴可以阅读:
  • Hadoop学习之路(六):理解Hadoop三大核心组件之HDFS
  • Hadoop学习之路(七):理解Hadoop三大核心组件之MapReduce
  • 更多内容可以查看萧邦主的技术博客导航

你可能感兴趣的:(Hadoop生态)