• Hadoop生态之Yarn


    由于博主最近在忙着期末考试捏所以一直没有更新博客,昨天也是刚考完试火急火燎的赶到了公司,博主在这里劝诫大家一定要多方位核查自己即将去的公司,并且该问的问清楚了,太难了。。。
    在这里插入图片描述

    在生活中我们大家有时候肯定会因为搬家而烦恼,但是那些搬家公司可以为我们解决这些问题,今天我们讲的Yarn在Hadoop集群中就起到了这样的作用,来负责资源调度

    1.什么是Yarn?

    Apache Hadoop YARN 是开源 Hadoop 分布式处理框架中的资源管理和作业调度技术。作为 Apache Hadoop 的核心组件之一,YARN 负责将系统资源分配给在 Hadoop 集群中运行的各种应用程序,并调度要在不同集群节点上执行的任务。

    2.Yarn的基础架构

    YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
    在这里插入图片描述
    YARN的基本组成结构,YARN 主要由 ResourceManager、NodeManager、ApplicationMaster 和 Container 等几个组件构成。

    • ResourceManager是Master上一个独立运行的进程,负责集群统一的资源管理、调度、分配等等;

    • NodeManager是Slave上一个独立运行的进程,负责上报节点的状态;

    • ApplicationMaster相当于这个Application的监护人和管理者,负责监控、管理这个Application的所有Attempt在* cluster中各个节点上的具体运行,同时负责向Yarn ResourceManager申请资源、返还资源等;

    • Container是yarn中分配资源的一个单位,包涵内存、CPU等等资源,YARN以Container为单位分配资源;

    ResourceManager 负责对各个 NadeManager 上资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的 ApplicationMaster,它负责向 ResourceManager 申请资源,并要求 NodeManger 启动可以占用一定资源的任务。由于不同的 ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响。

    3.Yarn的工作机制

    在这里插入图片描述

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

    (2)YarnRunner向ResourceManager申请一个Application。

    (3)RM将该应用程序的资源路径返回给YarnRunner。

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

    (5)程序资源提交完毕后,申请运行mrAppMaster。

    (6)RM将用户的请求初始化成一个Task。

    (7)其中一个NodeManager领取到Task任务。

    (8)该NodeManager创建容器Container,并产生MRAppmaster。

    (9)Container从HDFS上拷贝资源到本地。

    (10)MRAppmaster向RM 申请运行MapTask资源。

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

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

    (13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。

    (14)ReduceTask向MapTask获取相应分区的数据。
    (15)程序运行完毕后,MR会向RM申请注销自己。

    4.Yarn的作业提交过程

    Application在Yarn中的执行过程,整个执行过程可以总结为三步:

    (1)应用程序提交
    (2)启动应用的ApplicationMaster实例
    (3)ApplicationMaster 实例管理应用程序的执行
    在这里插入图片描述
    作业提交全过程详解
    (1)作业提交
    第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
    第2步:Client向RM申请一个作业id。
    第3步:RM给Client返回该job资源的提交路径和作业id。
    第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
    第5步:Client提交完资源后,向RM申请运行MrAppMaster。
    (2)作业初始化
    第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
    第7步:某一个空闲的NM领取到该Job。
    第8步:该NM创建Container,并产生MRAppmaster。
    第9步:下载Client提交的资源到本地。
    (3)任务分配
    第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
    第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
    (4)任务运行
    第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
    第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
    第14步:ReduceTask向MapTask获取相应分区的数据。
    第15步:程序运行完毕后,MR会向RM申请注销自己。
    (5)进度和状态更新
    YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
    (6)作业完成
    除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

    5.Yarn的调度器和调度算法

    目前,Hadoop作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop3.1.3默认的资源调度器是Capacity Scheduler。
    CDH框架默认调度器是Fair Scheduler。
    具体设置详见:yarn-default.xml文件

    <property>
        <description>The class to use as the resource scheduler.</description>
        <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    </property>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (1)先进先出调度器(FIFO)

    FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
    在这里插入图片描述

    优点:简单易懂;
    缺点:不支持多队列,生产环境很少使用;

    (2)容量调度器(Capacity Scheduler)

    Capacity Scheduler是Yahoo开发的多用户调度器。
    在这里插入图片描述

    (3)公平调度器(Fair Scheduler)

    Fair Schedulere是Facebook开发的多用户调度器。
    在这里插入图片描述
    公平调度器缺额

    在这里插入图片描述
    在这里插入图片描述
    公平调度器资源分配算法
    在这里插入图片描述
    公平调度器队列资源分配方式
    在这里插入图片描述

    在这里插入图片描述

    6.Yarn常用命令

    Yarn状态的查询,除了可以在hadoop103:8088页面查看外,还可以通过命令操作。常见的命令操作如下所示:
    需求:执行WordCount案例,并用Yarn命令查看任务运行情况。

    [atguigu@hadoop102 hadoop-3.1.3]$ myhadoop.sh start
    
    [atguigu@hadoop102 hadoop-3.1.3]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
    
    • 1
    • 2
    • 3

    6.1 yarn application查看任务

    (1)列出所有Application:

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn application -list
    2021-02-06 10:21:19,238 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of applications (application-types: [], states: [SUBMITTED, ACCEPTED, RUNNING] and tags: []):0
                    Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
    
    • 1
    • 2
    • 3
    • 4

    (2)根据Application状态过滤:yarn application -list -appStates (所有状态:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn application -list -appStates FINISHED
    2021-02-06 10:22:20,029 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of applications (application-types: [], states: [FINISHED] and tags: []):1
                    Application-Id	    Application-Name	    Application-Type	      User	     Queue	             State	       Final-State	       Progress	                       Tracking-URL
    application_1612577921195_0001	          word count	           MAPREDUCE	   atguigu	   default	          FINISHED	         SUCCEEDED	           100%	http://hadoop102:19888/jobhistory/job/job_1612577921195_0001
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (3)Kill掉Application:

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn application -kill application_1612577921195_0001
    2021-02-06 10:23:48,530 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Application application_1612577921195_0001 has already finished
    
    • 1
    • 2
    • 3

    6.2 yarn logs查看日志

    (1)查询Application日志:yarn logs -applicationId

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn logs -applicationId application_1612577921195_0001
    
    • 1

    (2)查询Container日志:yarn logs -applicationId -containerId

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn logs -applicationId application_1612577921195_0001 -containerId container_1612577921195_0001_01_000001
    
    • 1

    6.3 yarn applicationattempt查看尝试运行的任务

    (1)列出所有Application尝试的列表:yarn applicationattempt -list

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn applicationattempt -list application_1612577921195_0001
    2021-02-06 10:26:54,195 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of application attempts :1
             ApplicationAttempt-Id	               State	                    AM-Container-Id	                       Tracking-URL
    appattempt_1612577921195_0001_000001	            FINISHED	container_1612577921195_0001_01_000001	http://hadoop103:8088/proxy/application_1612577921195_0001/
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (2)打印ApplicationAttemp状态:yarn applicationattempt -status

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn applicationattempt -status appattempt_1612577921195_0001_000001
    2021-02-06 10:27:55,896 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Application Attempt Report : 
    	ApplicationAttempt-Id : appattempt_1612577921195_0001_000001
    	State : FINISHED
    	AMContainer : container_1612577921195_0001_01_000001
    	Tracking-URL : http://hadoop103:8088/proxy/application_1612577921195_0001/
    	RPC Port : 34756
    	AM Host : hadoop104
    	Diagnostics :
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6.4 yarn container查看容器

    (1)列出所有Container:yarn container -list <ApplicationAttemptId>
    
    • 1

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn container -list appattempt_1612577921195_0001_000001
    2021-02-06 10:28:41,396 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total number of containers :0
    Container-Id Start Time Finish Time State Host Node Http Address
    (2)打印Container状态: yarn container -status
    [atguigu@hadoop102 hadoop-3.1.3]$ yarn container -status container_1612577921195_0001_01_000001
    2021-02-06 10:29:58,554 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Container with id ‘container_1612577921195_0001_01_000001’ doesn’t exist in RM or Timeline Server.
    注:只有在任务跑的途中才能看到container的状态

    6.5 yarn node查看节点状态

    列出所有节点:yarn node -list -all

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn node -list -all
    2021-02-06 10:31:36,962 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Total Nodes:3
             Node-Id	     Node-State	Node-Http-Address	Number-of-Running-Containers
     hadoop103:38168	        RUNNING	   hadoop103:8042	                           0
     hadoop102:42012	        RUNNING	   hadoop102:8042	                           0
     hadoop104:39702	        RUNNING	   hadoop104:8042	                           0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6.6 yarn rmadmin更新配置

    加载队列配置:yarn rmadmin -refreshQueues

    [atguigu@hadoop102 hadoop-3.1.3]$ yarn rmadmin -refreshQueues
    2021-02-06 10:32:03,331 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8033
    
    • 1
    • 2

    6.7 yarn queue查看队列

    打印队列信息:yarn queue -status <QueueName>
    
    • 1
    [atguigu@hadoop102 hadoop-3.1.3]$ yarn queue -status default
    2021-02-06 10:32:33,403 INFO client.RMProxy: Connecting to ResourceManager at hadoop103/192.168.10.103:8032
    Queue Information : 
    Queue Name : default
    	State : RUNNING
    	Capacity : 100.0%
    	Current Capacity : .0%
    	Maximum Capacity : 100.0%
    	Default Node Label expression : <DEFAULT_PARTITION>
    	Accessible Node Labels : *
    	Preemption : disabled
    	Intra-queue Preemption : disabled
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    7.Yarn的生产核心参数

    在这里插入图片描述

    8.Yarn常见面试题

    8.1 yarn主要作用

    YARN 的基本设计思想是将MapReduce V1 中的JobTracker 拆分为两个独立的服务:ResourceManager 和ApplicationMaster。ResourceManager 负责整个系统的资源管理和分配,ApplicationMaster 负责单个应用程序的的管理。

    8.2 yarn的结构

    关于yarn的结构博主在上面详细的介绍了,请移步上文。

    8.3 说一下关于yarn的几种资源调度器

    这个在博主的博客中etl实习面试里面有,附上一个超链接捏(https://blog.csdn.net/h123456789999999/article/details/125305835?spm=1001.2014.3001.5502)

    8.4 简单介绍三个组件的作用?

    RM:负责所有资源的监控、分配和管理

    AM:负责每一个具体应用程序的调度和协调

    --applicationmaster。用户提交的每个应用程序均包含一个AM,它可以运行在RM以外的机器上。
    
    • 1

    NM:负责每一个节点的维护。

    --nodemanger负责该节点的程序的正常运行,定时向RM汇报本节点资源(cpu、内存)的使用情况和Container的运行状况。当Rm宕机后连接RM的备用节点。负责接收并处理来自AM的Container的启动、停止等各种请求。
    
    • 1

    8.5 什么是container?

    是一个抽象概念,称之为容器,包含任务运行时所需的资源(包括内存、硬盘、cpu等)和环境(包含启动命令、环境变量等)

    8.6 yarn的执行流程?

    ①客户端向集群提交一个任务,该任务首先到RM中的AM
    
    ②AM收到任务后,会在集群中找一个NodeManger,在该NodeManger上启动一个APPMaster进程。该进程用于执行任务划分和任务监控。
    
    ③AppMaster启动起来之后,会向RM中的AM注册信息,APPMaster向RM下的ResourceSchedule申请计算任务所需的资源。
    
    ④AppMaster申请到资源之后,会与所有NodeManger通信要求他们启动所有计算任务(map和reudce)
    
    ⑤各个NM启动对应的容器Container用来执行Map和Reduce任务。
    
    ⑥各个任务会向APPMaster汇报自己的执行进度和执行状况,以便让AppMaster随时掌握各个任务的运行状态,在某个任务出了问题之后重启执行该任务。
    
    ⑦在执行完之后,APPMaster会向AM汇报,以便让ApplicationManger注销并关闭自己,使得资源得以回收。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    **关于Yarn的知识先拓展这些,博主想和大家说如果拿到了自己的offer一定要问清楚再去,否则会贼惨,歇了一周继续码吧。。。。。心累了 **

    在这里插入图片描述

  • 相关阅读:
    一篇就够了,各种快捷键
    高中数学:平面向量-常考题型汇总
    软考高级之系统架构师之软件需求工程
    Linux—系统基础一
    CAS:1609659-02-0_TCO-Amine_TCO-NH2-反式环辛烯(TCO)
    java基于springboot+vue的园区入驻停车管理系统
    PTA 7-185 组个最小数
    口袋参谋:如何通过布局“问大家”,快速提高宝贝转化!
    全栈自动化测试之python基础基本数据类型数值类型及序列类型
    requirements.txt用法你真的清楚吗
  • 原文地址:https://blog.csdn.net/h123456789999999/article/details/125521437