• Hadoop的第三大组成:YARN框架


    一、YARN基本概念

    YARN是一个分布式资源调度系统,专门用来给分布式计算程序提供计算资源的,而且YARN只负责进行资源的提供,不管计算程序的逻辑,因此YARN这个软件非常的成功,因为YARN不关注程序计算逻辑,因此只要是分布式计算程序,只要满足YARN的运行要求,那么就可以在YARN上进行运行,由YARN进行资源调度。spark、flink等等分布式计算程序都可以在YARN上运行。

    二、YARN的基本架构组成

    YARN之所以提供分布式计算资源,主要原因就是因为YARN的设计架构。

    1、ResourceManager:YARN集群的管理者

    • 1、负责进行资源的配置
    • 2、负责整个集群的状态
    • 3、接受客户端或者applicationmaster的资源申请

    2、NodeManager

    • 1、负责接受RM给NM分配的task任务(就是资源的打包任务)
    • 2、负责启动Container容器(打包的计算程序所需的运行资源)

    以上两个组成,YARN启动之后就会有的进程。

    3、Container

    封装了一组计算资源的容器,包含了计算程序所需的资源,资源的具体的配额都是客户端或者ApplicationMaster去向RM申请。

    4、ApplicationMaster

    任何一个分布式计算程序如果想在YARN上运行,分布式计算程序必须能启动一个ApplicationMaster进程,比如MR程序在YARN上运行就会启动MRAppcationMaster。这个进程不是由YARN自带的,而是分布式计算程序想在YARN上运行,分布式计算程序必须得有这么一个进程。

    YARN的工作核心,YARN之所以不知道分布式计算程序的计算逻辑,还能给分布式计算程序提供资源,全凭借ApplicationMaster的存在,ApplicationMaster是分布式程序运行的核心,监控分布式计算程序有没有运行成功、负责向RM申请分布式程序运行的资源。

    当有分布式计算程序在YARN上运行的时候,才会出现这两个进程。

    三、YARN的详细工作流程–运行MapReduce

    ​ (0)MR程序提交到客户端所在的节点

    ​ (1)yarnrunner向ResourceManager申请一个application。

    ​ (2)RM将该应用程序的资源路径返回给yarnrunner

    ​ (3)该程序将运行所需资源提交到HDFS上

    ​ (4)程序资源提交完毕后,申请运行MRAppMaster

    ​ (5)RM将用户的请求初始化成一个task

    ​ (6)其中一个NodeManager领取到task任务。

    ​ (7)该NodeManager创建容器Container,并产生MRAppmaster

    ​ (8)Container从HDFS上拷贝资源到本地

    ​ (9)MRAppmaster向RM 申请运行MapTask容器

    ​ (10)RM将运行MapTask任务分配给另外两个NodeManager,另外两个NodeManager分别领取任务并创建容器。

    ​ (11)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。

    ​ (12)MRAppmaster向RM申请2个容器,运行ReduceTask。

    ​ (13)ReduceTask向MapTask获取相应分区的数据。

    ​ (14)程序运行完毕后,MR会向RM注销自己。

    四、YARN的资源调度器问题

    YARN在进行资源分配的时候,RM需要先将client或者AM申请的资源初始化成为一个task任务,资源的task任务不是直接下发给NM,而是先把task任务给加入到一个RM的调度器当中,由调度器在合适的时机下发任务给NM。

    YARN中一共三种的资源调度器:

    • FIFIO资源调度器

      • 是一种队列调度器,每一个任务加入到调度器中,按照时间的先后依次排列,给NM下发任务的时候,是先来的先分配,后来等待集群资源充足继续分配。
        只有一个队列,队列使用的集群中所有的资源。
      • 特点:如果有些任务比较重要,必须排队,只有等到队列中你排到了最前面了才会给你分配。
      • Hadoop1.x版本YARN默认的调度器机制
    • 容量调度器

      • 也是一个队列调度器,但是多个队列并行进行分配,每一个队列具备YARN集群中的部分资源。在同一个时刻,可以下发多个任务。
      • Hadoop2.x和hadoop3.x默认调度器
    • 公平调度器

      • 也是可以具备多个队列,每个队列具备集群中的部分资源,不一样的地方在于每一个队列中的任务不等待,每一个任务都会启动,均匀的享有集群的资源。
    • 修改:yarn-site.xml

      • yarn.resourcemanager.scheduler.class
        org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
        
        • 1
        • 2

    默认使用的容量调度器,容量调度器可以有多个队列,每一个队列占用集群的部分资源,默认情况下容量调度只有一个队列default,队列占有集群的所有资源,如果配置容量调度器的第二个队列:capacity-scheduler.xml。

    • <property>
          <name>yarn.scheduler.capacity.root.queuesname>
          <value>default,queueAvalue>
          <description>
            The queues at the this level (root is the root queue).
          description>
        property>
      容量调度器有几个队列
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 
      <property>
          <name>yarn.scheduler.capacity.root.default.capacityname>
          <value>40value>
        property>
        
        <property>
          <name>yarn.scheduler.capacity.root.default.maximum-capacityname>
          <value>60value>
        property>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    • 如果要配置多个队列,保证多个队列的capacity加起来是100,每一个队列的最大占用容量要大于等于配置队列容量。

    五、YARN的web网站问题

    YARN提供一个web网站,http://ip:8088,通过这个web网站,可以查看YARN集群的资源信息和队列信息,以及可以查看YARN上运行的分布式计算程序的状态以及运行的日志输出。

    存在问题

    • 1、YARN记录的分布式运行程序,只是本次开启有效,如果YARN关闭重启了,那么以前在YARN上运行的日志全部消失了。
    • 2、YARN记录的分布式运行程序,在网站上看不到详细的日志信息,因此后期维护或者查看MR运行信息就很麻烦了。

    解决上述问题的方案

    • 第一步:配置MapReduce的历史服务器JobHistory,可以帮助YARN记忆以前开启的时候运行的MR程序。
      历史服务器的配置主要在mapred-site.xml文件中配置,主要配置两项

      • <property>
              <name>mapreduce.jobhistory.addressname>
               <value>single:10020value>
        property>
        <property>
            <name>mapreduce.jobhistory.webapp.addressname>
            <value>single:19888value>
        property>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
      • 如果使用历史服务器,必须启动历史服务器,如果不启动,历史服务器不会记录YARN上运行的分布式计算程序
        mr-jobhistory-daemon.sh start historyserver

    • 第二步:配置YARN聚合MapReduce运行日志信息–可以在YARN的web界面查看MR的详细日志
      配置yarn-site.xml文件

      • 
        <property>
            <name>yarn.log-aggregation-enablename>
            <value>truevalue>
        property>
        
        <property>
                <name>yarn.log-aggregation.retain-secondsname>
                <value>604800value>
        property>
        
        <property>
               <name>yarn.log.server.urlname>
               <value>http://single:19888/jobhistory/logsvalue>        
        property>
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
        • 14
        • 15
  • 相关阅读:
    bclinux aarch64 ceph 14.2.10 彻底删除ceph集群及数据
    javacc之路4---错误恢复
    【C语言】《回调函数》详细解析
    Java实现Excel批量导入数据库
    全链路自动化测试
    2022-10-28 linux IO指令 读写GPIO口电平实例
    2-SAT
    Python基础小知识问答系列-匿名函数
    HarmonyOS应用开发-首选项与后台通知管理
    【仿牛客网笔记】 Spring Boot进阶,开发社区核心功能-私信列表
  • 原文地址:https://blog.csdn.net/weixin_57367513/article/details/132767956