Hadoop生态之Yarn

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

Hadoop生态之Yarn

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

Yarn

; 1.什么是Yarn?

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

2.Yarn的基础架构

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。

Hadoop生态之Yarn
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的工作机制

Hadoop生态之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 实例管理应用程序的执行

Hadoop生态之Yarn
作业提交全过程详解
(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.classname>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulervalue>
property>

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

FIFO调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。

Hadoop生态之Yarn

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

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

Capacity Scheduler是Yahoo开发的多用户调度器。

Hadoop生态之Yarn

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

Fair Schedulere是Facebook开发的多用户调度器。

Hadoop生态之Yarn
公平调度器缺额

Hadoop生态之Yarn
Hadoop生态之Yarn
公平调度器资源分配算法
Hadoop生态之Yarn
公平调度器队列资源分配方式
Hadoop生态之Yarn

Hadoop生态之Yarn

; 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

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

(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

(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

6.2 yarn logs查看日志

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

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

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

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

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/

(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 :

6.4 yarn container查看容器

&#xFF08;1&#xFF09;&#x5217;&#x51FA;&#x6240;&#x6709;Container&#xFF1A;yarn container -list <applicationattemptid>
</applicationattemptid>

[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

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

6.7 yarn queue查看队列

&#x6253;&#x5370;&#x961F;&#x5217;&#x4FE1;&#x606F;&#xFF1A;yarn queue -status <queuename>
</queuename>
[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

7.Yarn的生产核心参数

Hadoop生态之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&#x3002;&#x7528;&#x6237;&#x63D0;&#x4EA4;&#x7684;&#x6BCF;&#x4E2A;&#x5E94;&#x7528;&#x7A0B;&#x5E8F;&#x5747;&#x5305;&#x542B;&#x4E00;&#x4E2A;AM&#xFF0C;&#x5B83;&#x53EF;&#x4EE5;&#x8FD0;&#x884C;&#x5728;RM&#x4EE5;&#x5916;&#x7684;&#x673A;&#x5668;&#x4E0A;&#x3002;

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

--nodemanger&#x8D1F;&#x8D23;&#x8BE5;&#x8282;&#x70B9;&#x7684;&#x7A0B;&#x5E8F;&#x7684;&#x6B63;&#x5E38;&#x8FD0;&#x884C;&#xFF0C;&#x5B9A;&#x65F6;&#x5411;RM&#x6C47;&#x62A5;&#x672C;&#x8282;&#x70B9;&#x8D44;&#x6E90;&#xFF08;cpu&#x3001;&#x5185;&#x5B58;&#xFF09;&#x7684;&#x4F7F;&#x7528;&#x60C5;&#x51B5;&#x548C;Container&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x51B5;&#x3002;&#x5F53;Rm&#x5B95;&#x673A;&#x540E;&#x8FDE;&#x63A5;RM&#x7684;&#x5907;&#x7528;&#x8282;&#x70B9;&#x3002;&#x8D1F;&#x8D23;&#x63A5;&#x6536;&#x5E76;&#x5904;&#x7406;&#x6765;&#x81EA;AM&#x7684;Container&#x7684;&#x542F;&#x52A8;&#x3001;&#x505C;&#x6B62;&#x7B49;&#x5404;&#x79CD;&#x8BF7;&#x6C42;&#x3002;

8.5 什么是container?

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

8.6 yarn的执行流程?

&#x2460;&#x5BA2;&#x6237;&#x7AEF;&#x5411;&#x96C6;&#x7FA4;&#x63D0;&#x4EA4;&#x4E00;&#x4E2A;&#x4EFB;&#x52A1;&#xFF0C;&#x8BE5;&#x4EFB;&#x52A1;&#x9996;&#x5148;&#x5230;RM&#x4E2D;&#x7684;AM

&#x2461;AM&#x6536;&#x5230;&#x4EFB;&#x52A1;&#x540E;&#xFF0C;&#x4F1A;&#x5728;&#x96C6;&#x7FA4;&#x4E2D;&#x627E;&#x4E00;&#x4E2A;NodeManger&#xFF0C;&#x5728;&#x8BE5;NodeManger&#x4E0A;&#x542F;&#x52A8;&#x4E00;&#x4E2A;APPMaster&#x8FDB;&#x7A0B;&#x3002;&#x8BE5;&#x8FDB;&#x7A0B;&#x7528;&#x4E8E;&#x6267;&#x884C;&#x4EFB;&#x52A1;&#x5212;&#x5206;&#x548C;&#x4EFB;&#x52A1;&#x76D1;&#x63A7;&#x3002;

&#x2462;AppMaster&#x542F;&#x52A8;&#x8D77;&#x6765;&#x4E4B;&#x540E;&#xFF0C;&#x4F1A;&#x5411;RM&#x4E2D;&#x7684;AM&#x6CE8;&#x518C;&#x4FE1;&#x606F;&#xFF0C;APPMaster&#x5411;RM&#x4E0B;&#x7684;ResourceSchedule&#x7533;&#x8BF7;&#x8BA1;&#x7B97;&#x4EFB;&#x52A1;&#x6240;&#x9700;&#x7684;&#x8D44;&#x6E90;&#x3002;

&#x2463;AppMaster&#x7533;&#x8BF7;&#x5230;&#x8D44;&#x6E90;&#x4E4B;&#x540E;&#xFF0C;&#x4F1A;&#x4E0E;&#x6240;&#x6709;NodeManger&#x901A;&#x4FE1;&#x8981;&#x6C42;&#x4ED6;&#x4EEC;&#x542F;&#x52A8;&#x6240;&#x6709;&#x8BA1;&#x7B97;&#x4EFB;&#x52A1;&#xFF08;map&#x548C;reudce&#xFF09;

&#x2464;&#x5404;&#x4E2A;NM&#x542F;&#x52A8;&#x5BF9;&#x5E94;&#x7684;&#x5BB9;&#x5668;Container&#x7528;&#x6765;&#x6267;&#x884C;Map&#x548C;Reduce&#x4EFB;&#x52A1;&#x3002;

&#x2465;&#x5404;&#x4E2A;&#x4EFB;&#x52A1;&#x4F1A;&#x5411;APPMaster&#x6C47;&#x62A5;&#x81EA;&#x5DF1;&#x7684;&#x6267;&#x884C;&#x8FDB;&#x5EA6;&#x548C;&#x6267;&#x884C;&#x72B6;&#x51B5;&#xFF0C;&#x4EE5;&#x4FBF;&#x8BA9;AppMaster&#x968F;&#x65F6;&#x638C;&#x63E1;&#x5404;&#x4E2A;&#x4EFB;&#x52A1;&#x7684;&#x8FD0;&#x884C;&#x72B6;&#x6001;&#xFF0C;&#x5728;&#x67D0;&#x4E2A;&#x4EFB;&#x52A1;&#x51FA;&#x4E86;&#x95EE;&#x9898;&#x4E4B;&#x540E;&#x91CD;&#x542F;&#x6267;&#x884C;&#x8BE5;&#x4EFB;&#x52A1;&#x3002;

&#x2466;&#x5728;&#x6267;&#x884C;&#x5B8C;&#x4E4B;&#x540E;&#xFF0C;APPMaster&#x4F1A;&#x5411;AM&#x6C47;&#x62A5;&#xFF0C;&#x4EE5;&#x4FBF;&#x8BA9;ApplicationManger&#x6CE8;&#x9500;&#x5E76;&#x5173;&#x95ED;&#x81EA;&#x5DF1;&#xFF0C;&#x4F7F;&#x5F97;&#x8D44;&#x6E90;&#x5F97;&#x4EE5;&#x56DE;&#x6536;&#x3002;

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

Hadoop生态之Yarn

Original: https://blog.csdn.net/h123456789999999/article/details/125521437
Author: 红糖番薯
Title: Hadoop生态之Yarn

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817919/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球